How To Repaint Controls Without Flicker
Feb 25, 2011How can we repaint our controls at run-time without flicker (hiding them first and showing them afterwards)?
View 1 RepliesHow can we repaint our controls at run-time without flicker (hiding them first and showing them afterwards)?
View 1 RepliesI have a program written with VB.NET 2008 that includes a large number of dynamic controls in a form. When I drag the corner of my form, I want to resize every controls according to the new form size. It works very well, except that the controls are repainted one by one, instead of waiting at the end of my fonction and do a single repaint.
I did a lot of research on the NET without any good results:
- "Form1.DoubleBuffered = true" does not have any effect
- "Form1.SuspendLayout" does not have any effect
- "SendMessage(Me.Handle, WM_SETREDRAW, New IntPtr(CInt(False)), IntPtr.Zero)" suspended repaints but left the entire window messy.
I am running out of ideas. Here is a sample module to test if your trick works. Just try to resize the form, you will see how long it takes to repaint every control one by one:
[Code]...
My application is runs without any external dependencies like .dlls. When I run my app, the controls flicker on as it loads. It's not terrible, but it's annoying and kind of takes down from the professionalism. I was trying to figure out what was causing it and found out that it was my background image. My background image is a jpeg and I guess it is too large. Is there a way I can get it to load the image better so my controls don't flicker or maybe use a different file type that is smaller?
View 3 RepliesI'm using VS2005. On my old Win XP AMD computer, I developed a stock price chart in VB.net which I could scroll left/right with Hscrollbar. However my old PC failed due to faulty AMD motherboard. Now I'm using an Intel PC with Win XP and same VS2005. My VB.net solution has compiled and runs as it did before - with this difference. Sometimes my scrollbar flashes and sometimes it doesn't. Another thread mentioned "too many controls causing flicker" - but my Form does not have many controls on it. I can't find a property that mentions "flashing" when I search the scrollbar class members.
View 10 RepliesWhen I add or modify controls on the form the graphics are redrawn many times over.The more graphics that are drawn the slower the machine gets.
View 1 RepliesI know when I draw to the form and add controls I get a flicker effect.If I draw to a picturebox on the form and add controls will the picturebox flicker?
View 4 Repliespaint events in my dgv, i have a dgv, that will be multi color and with some icons to indicate the state of the data. For example, i load all the data to my dgv, add a new image column to the dgv that will have three different icons, then the rows can have one of three colors. The values to set the colors and icons are in two columns of the data source table. And i have another var that indicates if the rows headers have numbers or not, just to help the user...
VB.NET
Private Sub frmGPConfirmar_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
fillDGV()
prepareDGV()
[code]....
So what i need it's how i can do this, paint the numbers in the rows Headers, put the images in the column, and change the back color of some rows?In other forms where i don't have this three conditions i can do what i want, but in this one i can't... or i can but i doesn't work very well...
I'm looking for a way to limit Picturebox repaints. For example, I wish to be able to only call "repaint" a certain amount of times per second. All my searchs have come up with nothing. I could start a timer and get it to call repaint manually but that only ends up calling it more as it doesn't stop the normal form raising the event.
View 3 RepliesTo me it seems that Update, Refresh and Repaint all do the same job but there are no doubt rules about when to use which. I would be grateful for any enlightenment.
View 2 RepliesI have a project im working on in which data is loaded from a database using sqlite into a datagridview, one column in this datagridview is a custom rating column which windowsmedia like rating stars are displayed and when moused over the image is changed using the following custom column. When the mouse is moved in a cell the cell is forced to repaint and display the star image according to the mouse location in the cell.Now the odd thing is that this works perfectly when the data is loaded in with the SQLreader and added row by row, but when the data is loaded in using fill() using a datatable the cell will not repaint when moused over unless its row is currently selected or has been selected. Everything works fine loading the data row by row but loading time is much longer when there are 1000 items in a table.[code]
View 1 RepliesI'm having issues with a progressbar. I've created a progressbar that reads registry variables and uses that input to update the progressbar and some status messages (so I can call it from vbscripts, etc). I want it so when my status bar hits 100%, the bar stops, waits a few seconds, and then quits. However, it seems the program processes the remaining code and quits the application before it has time to completely repaint the progress bar (I'm guessing this because it will usually update to about 10% before it exits).. I'm using something like this...
If prcnt = 100 Then
progbar.Style = ProgressBarStyle.Blocks
progbar.Value = 0
[code].....
I have just run into an issue of screen flicker that I haven't been able to solve. I have a panel with dozens of controls on it. Painted onto the panel, behind the controls, are a few colored rectangles.
Those rectangles flicker whenever the mouse is moved over any control, or off the panel. Basically, a paint event for the panel is raised whenever the mouse leaves the panel.
Therefore, I thought that if I only painted the rectangles when they needed to be painted, not every time the Paint event was raised, that I would be able to avoid the flicker. After all, there is no obvious reason why they would need to be re-painted just because the mouse moved over a control on the panel.
the paint event was still being raised, and the panel just wasn't painting the rectangles, so they weren't being drawn at all (but they sure didn't flicker). So, the flicker is being caused by the fact that the paint event clears the panel, which gets displayed in a cleared state for a fraction of a second, then the rectangles are drawn in.
Doublebuffering the form has no discernible impact, which may well be because the screen draws the absence of the rectangles on one frame, then draws the presence of the rectangles on the next frame. They both get shown in sequence, so the rectangles appear to flicker badly.
One obvious alternative is to not even draw the rectangles, which works great, and they are only useful visual guides, not essential components. Still, that doesn't seem like a good solution.
So what I am looking for is a way to supress the display of the undrawn image before showing the finished image.
Whenever I load or close child forms or other form (for that matter) then there is flickering in my MDI form. The flickering maybe because the form may be getting painted with gradient or so. Now this flickering is really noticable and I need to solve this. I am pasting the code that I am using to paint my MDI form. If you guys think the code is in efficient then let me know. Or if there is any fix or other way to go about it then I would like to know.
CODE - written inside my MDI form.
Public Class MdiContainer
Inherits Control
Private WithEvents MdiPane As Control
[code]....
I have a 18kb 1024 x768 jpeg image that is set as background image of my form. The problem is the form now lags like crazy. How can I eliminate the lag?
View 1 RepliesI am making an application using VB.NET 2010 and I have set a background image which flickers every time I open any new Form or hit tab for jumping from textbox to textbox By pressing (tab) it only flickers once but always flicker when ever I close the form and open again. I have tried everything; background image set to, STRETCHED, CENTRE, ZOOM but still it's the same.
View 1 RepliesI have developed a program which continuously draws a circle using a timer. Now every time the circle gets displays it flickers and which is because i have used me.refresh. Is there any other way to avoid this flickering.
Here is my code
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
Me.sweepAngle += 1
If Me.sweepAngle = 360 Then
[CODE]....
How do I reduce flicker in a vb2005 panel?Inside the parent panel I have 2 other panels that I'm am using.
The outer most panel contains a background sprite and the two innermost panels are overlays that change to fit the places in the background sprite.When I change the overlay sprites I would like to reduce the flicker and make it a smooth transition from one sprite to the next.
Here is the code that changes the images in the overlay panels the overlay panel is not changed if the new value is the same as the old value
[Code]...
I've got a panel in windows forms (Visual Studio 2008) which has a background image (A book shelf).When scrolling the image flickers and does not redraw so looks awfully - I've tried creating a new object to use double buffering but this has no effect,
[Code]...
I'm using a listview control as a log window for a self-made FTP client application.Sometimes I need to add a row at slow speeds, but also sometimes a lot of information (50-100 rows, like dirlistings, login messages of FTP servers) has to be added to the listview within a For/Next loop.Now adding rows very quickly makes the listview flicker in an ennoying way. So much, the listview is hardly to read.For me, it is important I can see every row added (using different colors to know different meanings).Searching the internet, I find solutions using BeginUpdate & Endupdate of the listview control just outside the bounds of the For/Next loop. This makes that the new rows are displayed only when the For/Next loop is complete.Does anyone know a solution to significant reduce the flickering (maybe without using BeginUpdate & EndUpdate?), but where I still can see every single row added?
View 21 RepliesThe title says it all. I'm looking for a way to stop flickering in my animations using the .net GDI + for making a 2d game. I've found lot's of bad tutorials online about double buffering and refresh but none of them work.
View 2 RepliesI am using a MDI form and child forms. Now I don't like the standard back colour of mdi form so I got code on the net which paints a gradient colour to the mdi. So far it is working okay.Now the problem is when I load a child form or close it or do a similar activity then it causes flicker in the mdi background. This gets pretty annoying at times and you see the background flicker.
View 2 RepliesI am sure that I have read how to do this but I seem to recall that it is to do with the paint event of a control.
View 4 RepliesI have a character that I made in graphics and when an enemy attacks the character, I want it to flicker, how would I do this?
View 2 RepliesI was wondering if it someone could help me solve this problem. I have a full screen application with a panel in the center which is used to display different user controls and screens when the user uses the app.However, I have a rather large gradient image set as my form's background and it causes the panel to flicker every time controls are added. I find that when the background image is removed the flicker goes away. How can I keep the background image but eliminate the flicker? My form is already double buffered.
View 5 RepliesI'm having trouble with a football program that I'm writing. I'm finding that there is a lot of flicker coming from the program having to redrawn 36 (Australian football) small circles with numbers in them about 10 times per second (or even more) as the players move.I'm just using basic e.graphics. fillellipse.code in the Paint section of the form. I then use me.invalidate on the timer's tick routine.I haven't touched this graphical stuff for a while and I vaguely remember there being some ways to help this. There are also things like the ground which I'd like to not have redrawn because they don't have to as they don't move. I remember that you can do this but I don't remember how.
View 2 RepliesI have a ListView control contains about 700 items and 6 columns, the ListView is flicker badly when resizing any column.Is there is any property belong to the ListView or its container can reduce this flicker?
View 6 RepliesI have a htpc project that I am working on. The main program loads dlls which are basically other win forms. On each of these forms, including the main program, I use a picturebox (double buffered picturebox) for the background image and then draw everything on it by hand. Whenever I go from the main program to the dll, I get a weird flicker. It looks like it is the previously used double buffer. Is there any way to clear the background double buffer before the flicker?
View 3 RepliesI am developing a window based application in VS2008, it has 3 forms.on each forms i have used TableLayout panel and set the Dock property to FILL.due to this, on page load my screen get's flicker and resize event get's called.i have tried with "Doublebuffered" property but failed if i remove doc property (means set it to none) then it's working fine but on only spcific screen resolution my screen works, on higher resolution it get's cut.
View 2 RepliesI need to draw a bitmap background with one or more moving bitmaps in the foreground; something like a chessboard where pieces move across it. I use a timer-tick event to redraw the background and then draw the relocated foreground image like the code below. But I get flicker, even though I set the form to use double-buffering. The culprit seems to be redrawing the background to refresh where the foreground images used to be; no flicker if I replace the background DrawImage with a simple Graphics.Clear. I think what I want to do is draw the background, and the foreground bitmap(s), in memory and then render it all. I used to do this with double-buffering, BitBlt, and .Refresh in VB6 but I haven't found the equivalent in VB2010. This must be a pretty common graphics requirement; what's the trick to it?
Dim Gfx As Graphics
Me.SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.UserPaint Or ControlStyles.OptimizedDoubleBuffer, True)
Dim rectBrd As Rectangle 'use as clipping region for drawing
[Code].....
While I do know the above goal is rather challenging to achieve, I know it can be done.What the one I made does:It compares each word to a word from the list, if its a match, it will physically select the text and change the color, and finally it will return the carat to the position it was in when it highlighted.
Issues with this: Flickering. It always flickers. I managed to reduce the flicker by making the thread sleep for 50 milliseconds, but I could not get rid of it entirely (it didn't noticeably slow down typing either). Now, another thing that I tried was using a second RichTextBox to have the highlighting occur to that, but that made no obvious differences at all.Scrolling. It will scroll the RichTextBox if the amount of text is big enough to cause scrollbars to appear.Deleting text. If you delete part of a word which has been highlighted, itll retain the color formatting even if the word is now changed. Itll also physically select the entire word, which baffles me endlessly.Closing the window. Since the highlight subroutine is called whenever the RichTextBox's TextChanged event is called, apparently it is fired when the window closes? However, since the window is closing, it slows down the entire process, so with a larger file it may take 5-10 seconds to go through and highlight each keyword.
How can I solve each of these issues? I do not want to use someone else's component, I specifically want to use my own.Physically edit the RTF instead of using a built in method for changing the text color, this would get rid of all my issues. Assuming a keyword was "The" (for example), what would the rtf be to make it turn blue?Don't use syntax highlighting (last resort here)My end goal: A syntax highlighter for a RichTextBox which works as well as the one in Visual Studio.
EDIT: Is there another component which would be better for this than a RichTextBox?