解决C#中ListView数据刷新时界面闪烁的问题

通常往ListView不断写入数据时,会发现ListView上的数据存在抖动闪烁的问题。对于追求完美的强迫症晚期患者而言,这一点是无法容忍的。同时也带来不良的用户体验。

下面通过双缓冲的方法解决该问题。

  1. 新建一个类

public class DoubleBufferListView : ListView
{
public DoubleBufferListView()
{
SetStyle(ControlStyles.DoubleBuffer |
ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint, true);
UpdateStyles();
}
}
2. 实例化这个类,并在Form中具体设置

DoubleBufferListView listView1 = new DoubleBufferListView();
private void Spurious_Test_Pannel_Load(object sender, EventArgs e)
{
foreach (TabPage p in this.tabControl1.TabPages)
{
p.Parent = null;
}
this.tabPage1.Controls.Add(listView1);
listView1.GridLines = true; // 打开Grid
listView1.View = View.Details; // detail视图
listView1.FullRowSelect = true; // 行全选
listView1.Dock = DockStyle.Fill; // 填充父容器
listView1.BackColor = Color.Azure; // background color
}
3.往该ListView控件内写入数据,看最后的实现结果

public void myFun()
{
listView1.Columns.Add(“Num”);
listView1.Columns.Add(“Result”);
for (int i = 0; i < 20; i++)
{
ListViewItem p = listView1.Items.Add(i.ToString());
p.SubItems.Add(“This is test” + i.ToString());
}
Thread.Sleep(300);
}
4.新建一个Button控件调用上面的自定义方法

private void button1_Click(object sender, EventArgs e)
{
Thread thread1 = new Thread(new ThreadStart(delegate
{
myFun();
}));
thread1.IsBackground = true;
thread1.Start();
}

————————————————
版权声明:本文为CSDN博主「吾性圣人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/IllegalName/article/details/64438108

Original: https://www.cnblogs.com/waw/p/16457086.html
Author: 狼人:-)
Title: 解决C#中ListView数据刷新时界面闪烁的问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/547795/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球