【问题标题】:Scrolling in DataGridView causes overwritten text在 DataGridView 中滚动会导致文本被覆盖
【发布时间】:2017-08-03 10:06:54
【问题描述】:

我有一个带有文本和图像的可滚动 DataGridView。但如果它包含更多行,则适合屏幕滚动无法正常工作。如果滚动应该隐藏的文本部分,则会保留在新文本的顶部。所以我的 DataGridView 的顶部和底部包含写在彼此顶部的双文本。不过中间部分很好。

创建视图后,我调整了文本大小和单元格大小。这可能是问题所在。老实说,我真的不知道从哪里开始寻找解决方案。我唯一能想到的就是尝试在滚动事件上重新绘制。我试过这个similar issue,但它并没有为我解决这个问题。我还看到很多人在 datagridview 中绘画时都会遇到问题,但我没有(所以请不要将其标记为其中一个问题的副本)。这部分代码我没有写,只是图片通过设置在dgvAlarms_CellFormatting中的DataGridViewCellFormattingEventArgs.Value中传递。

当我尝试将 DataGridView 中除标题和图像(我在最后一张图片中剪下的)之外的所有内容都设置为 DoubleBuffered 时,它变成了黑色,如下所示:

感谢您的帮助。

【问题讨论】:

  • 只是猜测,但制作 DGV 肯定会提高滚动性能。它甚至可以帮助避免绘制错误。
  • 对不起,TaW,但你所说的“制造 DGV”是什么意思?
  • 哎呀,错字了。我的意思是“制作 DGV 双缓冲”。通过子类化或反射.. See here for both methods!
  • 原来我第一次尝试将其设为 DoubleBuffered 时我做错了,但这次如果我打开 DGV DoubleBuffered,除了标题之外的所有内容都会变为黑色。
  • 这听起来很奇怪,坦率地说,我不知道你仍然做错了什么。

标签: c# winforms datagridview scroll


【解决方案1】:

好的,我让它在评论中结合 TaW 的 anwser 并添加

    e.CellStyle.BackColor = Color.White;
    e.CellStyle.SelectionBackColor = Color.White;

到 CellFormatting 方法的开头。 有趣的是,如果您使用双缓冲区,背景颜色会设置为黑色,但如果您不使用,则保持白色(就像我定义的那样)。

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 2014-06-22
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多