By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,619 Members | 2,309 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,619 IT Pros & Developers. It's quick & easy.

how to avoid flickering in listview?

P: n/a
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


Nov 15 '05 #1
Share this Question
Share on Google+
6 Replies


P: n/a
"Joaquin Grech" <cr*******@bigfoot.com> wrote in message
news:uV**************@TK2MSFTNGP09.phx.gbl...
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.


See BeginUpdate() and EndUpdate().

-- Alan
Nov 15 '05 #2

P: n/a
I just posted an answer to that... it doesn't work

"Alan Pretre" <no@spam> wrote in message
news:Oe*************@TK2MSFTNGP10.phx.gbl...
"Joaquin Grech" <cr*******@bigfoot.com> wrote in message
news:uV**************@TK2MSFTNGP09.phx.gbl...
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.


See BeginUpdate() and EndUpdate().

-- Alan

Nov 15 '05 #3

P: n/a
Just to make myself clear, I call this every 2 seconds:

listView1.BeginUpdate();

foreach (ListViewItem aux in listView1.Items)

{

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

}

listView1.EndUpdate();

I thought this would stop the flickering by using beginupdate/endupdate but
the flickering is still there... any ideas?

Joaquin Grech

"Joaquin Grech" <cr*******@bigfoot.com> wrote in message
news:uV**************@TK2MSFTNGP09.phx.gbl...
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

Nov 15 '05 #4

P: n/a
Maybe

listView1.SuspendLayout();
....
....
listView1.ResumeLayout();

?

Cybertof.
In article <eU**************@TK2MSFTNGP10.phx.gbl>, creative1
@bigfoot.com says...
Just to make myself clear, I call this every 2 seconds:

listView1.BeginUpdate();

foreach (ListViewItem aux in listView1.Items)

{

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

}

listView1.EndUpdate();

I thought this would stop the flickering by using beginupdate/endupdate but
the flickering is still there... any ideas?

Nov 15 '05 #5

P: n/a
nice try, but nope

"Cybertof" <cy****************@gmx.net> wrote in message
news:MP************************@msnews.microsoft.c om...
Maybe

listView1.SuspendLayout();
...
...
listView1.ResumeLayout();

?

Cybertof.
In article <eU**************@TK2MSFTNGP10.phx.gbl>, creative1
@bigfoot.com says...
Just to make myself clear, I call this every 2 seconds:

listView1.BeginUpdate();

foreach (ListViewItem aux in listView1.Items)

{

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

}

listView1.EndUpdate();

I thought this would stop the flickering by using beginupdate/endupdate but the flickering is still there... any ideas?

Nov 15 '05 #6

P: n/a
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
"Joaquin Grech" <cr*******@bigfoot.com> wrote in message
news:uV**************@TK2MSFTNGP09.phx.gbl...
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

Nov 15 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.