Update listview's items and subitems with a timer

前端 未结 2 1245
时光说笑
时光说笑 2020-12-12 04:17

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

相关标签:
2条回答
  • 2020-12-12 04:24

    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;
        }
    }
    
    0 讨论(0)
  • 2020-12-12 04:45

    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 the EndUpdate 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.

    0 讨论(0)
提交回复
热议问题