这两种方法都是开启双缓冲解决闪烁的,听起来很高大上,但实际也就一点点代码。
第一种,添加一个新类,这个类放在datagridview或ListView所在的窗体类外面就行,代码如下
class DoubleBufferDataGridView : DataGridView
{
public DoubleBufferDataGridView()
{
SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
//UpdateStatus.Continue;
UpdateStyles();
}
}
另外要注意在设计器的Designer.cs 文件中修改对datagridview或ListView 的声明即可,有两处如下
this.dataGridView1 = new System.Windows.Forms.DataGridView();
修改成下面这句即可
this.dataGridView1 = new DoubleBufferListView();
private System.Windows.Forms.DataGridView dgv_Device;
修改成下面这句即可
private DoubleBufferDataGridView dgv_Device;
第二种方法,在datagridview或ListView所在的窗体类文件里面,比如Form1,另写一个扩展方法,代码如下
public static class DoubleBufferDataGridView
{
/// <summary>
/// 双缓冲,解决闪烁问题
/// </summary>
public static void DoubleBufferedDataGirdView(this DataGridView dgv, bool flag)
{
Type dgvType = dgv.GetType();
PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
pi.SetValue(dgv, flag, null);
}
}
之后在窗体里调用上面的方法,如下
public Form1()
{
InitializeComponent();
/// 新添加这一句调用就行了,如果有ListViews也是这样添加,
/// 但要注意方法里改为有关ListViews的声明即可
DataGridView1.DoubleBufferedDataGirdView(true);
}
这两种方法只用其一就行,个人觉得后者应该会更好一些,前者也能正确运行达到效果,但有时候会导致设计器引用出错而查看不了控件。
版权声明:本文为m0_59565974原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。