how to avoid flickering in listview?

how to avoid flickering in listview?

Post by Joaquin Gr » Thu, 06 Nov 2003 02:01:45


Hi

I did alot of research on this on the web and msdn and I couldn't find
anything.

I have a listview showing as a grid (table looking, with rows and columns
and no images at all, only text). I get the information to display on the
listview from the network and I add items often and stuff.

But more than adding items, what worries me is the step of modifying items.
I change the text of one of the columns for every row every 2 seconds.
Something like: "Time to next update: X seconds"
and that text changes every 2 seconds.

Every time i change the text, the item flickers. When I have 50 rows the
screen looks like a discoteque so it is not good.

I found lot of examples on avoiding flickering but most of them don't work,
are not correctly implemented or are thought for other
circunstances/controls.

I found that I could extend the listview control and add this to my
constructor:
this.SetStyle(ControlStyles.DoubleBuffer |

ControlStyles.UserPaint |

ControlStyles.AllPaintingInWmPaint,

true);

this.UpdateStyles();



that should enable double buffering, but i don't know how to draw the items
manually from there.



Any help would be greatly appreciated.



Joaquin Grech
 
 
 

how to avoid flickering in listview?

Post by Alan Pretr » Thu, 06 Nov 2003 02:11:43


See BeginUpdate() and EndUpdate().

-- Alan

 
 
 

how to avoid flickering in listview?

Post by Joaquin Gr » Thu, 06 Nov 2003 02:12:52

I just posted an answer to that... it doesn't work
 
 
 

how to avoid flickering in listview?

Post by Joaquin Gr » Thu, 06 Nov 2003 03:51:40

should i give up on this?

I got tons of samples on the web using lockwindowupdate, setstyle and other
wonderful stuff like handleing WM_PAINT and erasebg... nothing worked.

Anyone has a code that would make something as simple as this on a listview
work without flickering?

foreach (ListViewItem aux in listView1.Items)

{

aux.SubItems[3].Text="some changing text here";

}

looks simple? well... i found 250 posts from people with similar problems
and no one single one answered right :(

I guess the right solution would be using
this.SetStyle(ControlStyles.DoubleBuffer | ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint, true);

and drawing all the list items manually, but I have no idea how to do this.

Any code would be greatly appreciated.

Joaquin Grech




items.
work,
items