您的位置:首页 > 编程语言 > C#

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

2017-03-21 09:44 756 查看
通常往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();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# listview 界面
相关文章推荐