Category 1996世界杯

最近在研究datagridview长列会闪烁的问题,困扰了我好几天,原来是在datagridview重画单元格时,会闪烁。在网上找到了一篇博客,按照方法尝试了一下,十分管用,惊喜╰(*°▽°*)╯

原地址:https://blog.csdn.net/chenhongwu666/article/details/43305503 方法一

首先定义类,将此类放在datagridview或ListView所在的窗体类外面,然后代码如下,

/// 双缓冲DataGridView,解决闪烁 /// 使用方法:在DataGridView所在窗体的InitializeComponent方法中更改控件类型实例化语句将 /// this.dataGridView1 = new System.Windows.Forms.DataGridView(); 屏蔽掉,添加下面这句即可 /// this.dataGridView1 = new DoubleBufferListView(); /// class DoubleBufferDataGridView : DataGridView { public DoubleBufferDataGridView() { SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); //UpdateStatus.Continue; UpdateStyles(); } } /// /// 双缓冲ListView ,解决闪烁 /// 使用方法是在ListView 所在窗体的InitializeComponent方法中,更改控件类型实例化语句将 /// this.listView1 = new System.Windows.Forms.ListView(); 屏蔽掉, 添加下面语句即可 /// this.listView1 = new DoubleBufferListView(); /// class DoubleBufferListView : ListView { public DoubleBufferListView() { SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); UpdateStyles(); } }

方法二 直接写一个扩展方法,使用反射,直接上代码,将此类定义给DataGirdView或ListView所在的窗体类外面即可

public static class DoubleBufferDataGridView { ///

/// 双缓冲,解决闪烁问题 /// /// /// 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 static class DoubleBufferListView { /// /// 双缓冲,解决闪烁问题 /// /// /// public static void DoubleBufferedListView(this ListView lv, bool flag) { Type lvType = lv.GetType(); PropertyInfo pi = lvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); pi.SetValue(lv, flag, null); } }

两个方法都尝试了一下,相比较第二个方式对于我来说效果更好。

top
Copyright © 2088 足球世界杯预选赛_荷兰世界杯 - twllb.com All Rights Reserved.
友情链接