使用计时器更新listview的项目和子项目

时间:2011-12-04 21:17:52

标签: c#

我想用计时器更新部分或全部listview的项目和子项目内容(1秒刷新)但列表视图每秒闪烁一次。有时在重绘期间子项丢失。因为我的listview包含可能随时更改的数据,所以我使用了计时器。

代码: 我把这个函数放在计时器的Tick方法

void Refresh()
{
   foreach(string s in lsttring)
   {
      lv.items.add(s);
      lv.items[i].subitems.add(i);
   }
}

我希望只更改项目内容(项目文本和子项目文本),而不是整个列表视图以及计时器滴答。

2 个答案:

答案 0 :(得分:4)

ListView控件支持双缓冲,它将DoubleBuffered属性映射到本机控件的LVS_EX_DOUBLEBUFFER样式标志。它非常有效但你不能直接使用它,因为它是受保护的属性。在项目中添加一个新类并粘贴下面显示的代码。编译。将新控件从工具箱顶部拖放到表单上,替换旧表单。

using System;
using System.Windows.Forms;

class BufferedListView : ListView {
    public BufferedListView() {
        this.DoubleBuffered = true;
    }
}

答案 1 :(得分:1)

试试这个:

void Refresh()
{
   lv.BeginUpdate();
   foreach(string s in lsttring)
   {
      lv.items.add(s);
      lv.items[i].subitems.add(i);
   }
   lv.EndUpdate();
}

以这种方式更新所有项目,listview仅在此操作结束时刷新 来自Microsoft

  

...如果你想使用Add的方法一次添加一个项目   ListView.ListViewItemCollection类,可以使用BeginUpdate   防止控件每次都重新绘制ListView的方法   添加了一个项目。完成添加任务后   要控制的项目,请调用EndUpdate方法以启用ListView   重画。 这种添加项目的方式可以防止闪烁绘图   当大量项目被添加到控件时ListView。