我有一个定期更新的 ListView (每 60 秒)。每次更新时我都会闪烁,这对我来说很烦人。使用的方法是清除所有项目,然后重新创建它们。我决定不清除项目,而是直接将新文本写入单元格。这是更好的方法还是有人有更好的解决方案。
最佳答案
ListView 控件存在闪烁问题。问题似乎是控件的 Update 重载未正确实现,因此它的行为类似于刷新。 Update 应该使控件仅重绘其无效区域,而 Refresh 重绘控件的整个客户区。因此,如果您要更改列表中某个项目的背景颜色,那么只需要重新绘制该特定项目。不幸的是,ListView 控件似乎有不同的意见,它希望在您弄乱单个项目时重新绘制其整个表面……即使当前未显示该项目。因此,无论如何,您可以按如下方式自己滚动来轻松抑制闪烁:
class ListViewNF : System.Windows.Forms.ListView
{
public ListViewNF()
{
//Activate double buffering
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
//Enable the OnNotifyMessage event so we get a chance to filter out
// Windows messages before they get to the form's WndProc
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}
protected override void OnNotifyMessage(Message m)
{
//Filter out the WM_ERASEBKGND message
if(m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}
关于c#更新时闪烁的Listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/442817/