如何在水平滚动时防止DataGridView闪烁?
我正在使用Windows表单C#。
如屏幕截图所示,我有一个Form,它有一个用户控件,一个tab控件和一个DataGridView(30行和17列)。 我从SQL Server读取数据以填充DataGrdiView。
问题:
当我水平滚动时, DataGridView
闪烁很多。 然而,垂直滚动工作完美,没有闪烁。
我看过这里 , 这里 , 这里和这里,但没有一个与我的问题有关。
任何人都知道在水平滚动时阻止DataGridView
闪烁的任何解决方案。
您只需要使用DoubleBuffered
DataGridview
子类 :
class DBDataGridView : DataGridView { public DBDataGridView() { DoubleBuffered = true; } }
也可以将双缓冲注入到正常的开箱即用控件中,但我更喜欢拥有自己的类,因为它在其他方面也是可扩展的。
我已经通过公共属性扩展了类,以允许打开和关闭DoubleBuffering
..:
public class DBDataGridView : DataGridView { public new bool DoubleBuffered { get { return base.DoubleBuffered; } set { base.DoubleBuffered = value; } } public DBDataGridView() { DoubleBuffered = true; } }
..并用200列和2000行的负载测试它。 差异很明显; 而垂直滚动确实工作没有水平滚动需要DoubleBuffering
..
请注意,Form还具有DoubleBuffering
属性,但不会传播到任何嵌入式控件!
使用这个课程
public static class ExtensionMethods { public static void DoubleBuffered(this DataGridView dgv, bool setting) { Type dgvType = dgv.GetType(); PropertyInfo pi = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic); pi.SetValue(dgv, setting, null); } }
并输入此代码。
this.dataGridView1.DoubleBuffered(true);
请享用。