I would like to update some or all of my listview\'s items and subitems contents with a timer (1 second refresh) But the listview flicker each one second. Sometimes the subi
The ListView control supports double buffering, it maps the DoubleBuffered property to the native control's LVS_EX_DOUBLEBUFFER style flag. It is quite effective but you can't get to it directly since it is a protected property. Add a new class to your project and paste the code shown below. Compile. Drop the new control from the top of the toolbox onto your form, replacing the old one.
using System;
using System.Windows.Forms;
class BufferedListView : ListView {
public BufferedListView() {
this.DoubleBuffered = true;
}
}
Try this:
void Refresh()
{
lv.BeginUpdate();
foreach(string s in lsttring)
{
lv.items.add(s);
lv.items[i].subitems.add(i);
}
lv.EndUpdate();
}
In this manner you update all the items and listview will be refreshed only at the end of this operation.
From Microsoft:
...if you want to add items one at a time using the Add method of the ListView.ListViewItemCollection class, you can use the
BeginUpdate
method to prevent the control from repainting the ListView every time that an item is added. When you have completed the task of adding items to the control, call theEndUpdate
method to enable the ListView to repaint. This way of adding items can prevent flickered drawing of the ListView when lots of items are being added to the control.