C# 中DataGridView和ListView闪烁问题的解决方法
2015-01-30 12:14
183 查看
方法一
首先定义类,将此类放在datagridview或ListView所在的窗体类外面,然后代码如下,
方法二
直接写一个扩展方法,使用反射,直接上代码,将此类定义给DataGirdView或ListView所在的窗体类外面即可
其实很简单的,一看代码就能明白,使用双缓冲解决闪烁问题
首先定义类,将此类放在datagridview或ListView所在的窗体类外面,然后代码如下,
// <summary> /// 双缓冲DataGridView,解决闪烁 /// 使用方法:在DataGridView所在窗体的InitializeComponent方法中更改控件类型实例化语句将 /// this.dataGridView1 = new System.Windows.Forms.DataGridView(); 屏蔽掉,添加下面这句即可 /// this.dataGridView1 = new DoubleBufferListView(); /// </summary> class DoubleBufferDataGridView : DataGridView { public DoubleBufferDataGridView() { SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); //UpdateStatus.Continue; UpdateStyles(); } } /// <summary> /// 双缓冲ListView ,解决闪烁 /// 使用方法是在ListView 所在窗体的InitializeComponent方法中,更改控件类型实例化语句将 /// this.listView1 = new System.Windows.Forms.ListView(); 屏蔽掉, 添加下面语句即可 /// this.listView1 = new DoubleBufferListView(); /// </summary> class DoubleBufferListView : ListView { public DoubleBufferListView() { SetStyle(ControlStyles.DoubleBuffer | ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true); UpdateStyles(); } }
方法二
直接写一个扩展方法,使用反射,直接上代码,将此类定义给DataGirdView或ListView所在的窗体类外面即可
public static class DoubleBufferDataGridView { /// <summary> /// 双缓冲,解决闪烁问题 /// </summary> /// <param name="dgv"></param> /// <param name="flag"></param> 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 { /// <summary> /// 双缓冲,解决闪烁问题 /// </summary> /// <param name="lv"></param> /// <param name="flag"></param> 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); } } //调用方法 public Form1() { InitializeComponent(); DataGridView1.DoubleBufferedDataGirdView(true); }
其实很简单的,一看代码就能明白,使用双缓冲解决闪烁问题
相关文章推荐
- C# 中DataGridView和ListView闪烁问题的解决方法
- C# 线程中更新ListView某单元格导致闪烁问题的解决
- C# 绘图中的图片闪烁问题解决方法的使用结果
- C#控件的闪烁问题解决方法总结
- C#控件开发的闪烁问题和解决方法总结
- C#控件的闪烁问题解决方法总结
- C#控件的闪烁问题解决方法总结
- Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法
- 解决C#中ListView数据刷新时界面闪烁的问题
- C#控件的闪烁问题解决方法
- C#控件的闪烁问题解决方法总结
- C#控件的闪烁问题解决方法总结
- C#控件的闪烁问题解决方法总结
- C#.net picturebox动画效果,刷新图像的闪烁问题解决方法
- C#.Net中解决PictureBox控件用FormFile方法后文件被锁定的问题
- C# Convert类解决问题方法
- 双缓冲解决高频率刷新界面闪烁问题(C#)
- VS2005(c#)项目调试疑难问题解决方法锦集
- c# 疑难(一)之打开“OpenFileDialog”文本对话框后默认路径改变问题和解决方法
- c# 窗体的背景图片在加载时,背景图片闪烁问题 已解决