Sam*_*Sam 4 c# datagridview winforms
我正在使用Windows窗体C#.

如屏幕截图所示,我有一个Form,它有一个用户控件,一个tab控件和一个DataGridView(30行和17列).我从SQL Server读取数据以填充DataGrdiView.
问题:
当我水平滚动时,DataGridView闪烁很多.然而,垂直滚动工作完美,没有闪烁.
任何人都知道DataGridView在水平滚动时防止闪烁的任何解决方案.
TaW*_*TaW 13
您只需要使用DoubleBuffered DataGridview 子类:
class DBDataGridView : DataGridView
{
public DBDataGridView() { DoubleBuffered = true; }
}
Run Code Online (Sandbox Code Playgroud)
也可以将双缓冲注入到正常的开箱即用控件中,但我更喜欢拥有自己的类,因为它在其他方面也是可扩展的.
我通过公共财产扩大了班级,允许开启DoubleBuffering和关闭..:
public class DBDataGridView : DataGridView
{
public new bool DoubleBuffered
{
get { return base.DoubleBuffered; }
set { base.DoubleBuffered = value; }
}
public DBDataGridView()
{
DoubleBuffered = true;
}
}
Run Code Online (Sandbox Code Playgroud)
..并用200列和2000行的负载测试它.差异很明显; 垂直滚动确实工作,没有水平滚动需要DoubleBuffering..
请注意,Form也有一个DoubleBuffering属性,但不会传播到任何嵌入式控件!
或者您可以使用这样的功能
Ram*_*rja 10
使用这个课程
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);
}
}
Run Code Online (Sandbox Code Playgroud)
并输入此代码.
this.dataGridView1.DoubleBuffered(true);
Run Code Online (Sandbox Code Playgroud)
请享用.
小智 9
在“FormLoad”函数中只需输入这行代码。
yourDataGridView.GetType().GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(yourDataGridView, true, null);
Run Code Online (Sandbox Code Playgroud)
并通过在顶部写入以下行来导入 BindingFlags。
using System.Reflection;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4723 次 |
| 最近记录: |