加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何防止DataGridView在水平滚动时闪烁?

发布时间:2020-12-15 19:47:41 所属栏目:百科 来源:网络整理
导读:我正在使用 Windows窗体C#. 如屏幕截图所示,我有一个Form,它有一个用户控件,一个tab控件和一个DataGridView(30行和17列).我从SQL Server读取数据以填充DataGrdiView. 问题: 当我水平滚动时,DataGridView会闪烁很多.然而,垂直滚动工作完美,没有闪烁. 我看了h
我正在使用 Windows窗体C#.

如屏幕截图所示,我有一个Form,它有一个用户控件,一个tab控件和一个DataGridView(30行和17列).我从SQL Server读取数据以填充DataGrdiView.

问题:

当我水平滚动时,DataGridView会闪烁很多.然而,垂直滚动工作完美,没有闪烁.

我看了here,here,here和here,但没有一个与我的问题有关.

任何人都知道任何解决方案,以防止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 ..

enter image description here

请注意,Form还具有DoubleBuffering属性,但不会传播到任何嵌入式控件!

或者你可以使用function like this

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读