Delphi TStringGrid中的奇数绘图问题(黑色单元格)

Delphi TStringGrid中的奇数绘图问题(黑色单元格),delphi,delphi-xe,tstringgrid,Delphi,Delphi Xe,Tstringgrid,我在TStringGrid(Delphi XE)中遇到了一些非常奇怪的事情。我已经看到,有时当我单击网格中的第一行时,它会变成黑色(或者显示从窗体上的其他控件“窃取”的混乱画布)。 只有在特定的配置中,当网格接收到焦点时,才会发生这种情况。单击网格中的另一个区域后,一切看起来都正常,直到焦点移动到另一个TStringGrid 如何复制: 在窗体上放置两个字符串网格 如下所示设置它们(更新:我意识到goRowSelect和goEditing必须为“true”) 单击一个网格中的第一个单元格->什

我在TStringGrid(Delphi XE)中遇到了一些非常奇怪的事情。我已经看到,有时当我单击网格中的第一行时,它会变成黑色(或者显示从窗体上的其他控件“窃取”的混乱画布)。 只有在特定的配置中,当网格接收到焦点时,才会发生这种情况。单击网格中的另一个区域后,一切看起来都正常,直到焦点移动到另一个TStringGrid

如何复制:

  • 在窗体上放置两个字符串网格
  • 如下所示设置它们(更新:我意识到goRowSelect和goEditing必须为“true”)
  • 单击一个网格中的第一个单元格->什么都不发生
  • 单击第二个网格中的第一个单元格->第一个单元格变黑(参见屏幕截图)
这个问题在其他情况下也会出现(表单上不必有两个网格),但我只有在有两个网格时才设法重现它

object grid1: TStringGrid <------- same for Grid2
  Left = 2
  Top = 8
  Width = 422
  Height = 381
  BevelEdges = [beLeft, beTop]
  DefaultColWidth = 80
  DefaultRowHeight = 15
  DoubleBuffered = True
  FixedCols = 0
  Options = [goFixedVertLine, goFixedHorzLine, goVertLine, goHorzLine, goRangeSelect, goDrawFocusSelected, goColSizing, goEditing, goRowSelect, goFixedHotTrack]
  ParentDoubleBuffered = False
  TabOrder = 1
end

objectgrid1:TStringGrid我也可以重现您在XE3中遇到的问题。我将
ParentDoubleBuffered
重置为
True
后,问题就消失了


一般来说,当我在控件中看到奇数黑色矩形时,我将首先检查
ParentDoubleBuffered
设置。我看到您为两个网格启用了双缓冲。你有什么特别的理由这么做吗?如果您想避免在调整大小或单元更新过程中闪烁,这是很有帮助的。

我也可以重现您在XE3方面的问题。我将
ParentDoubleBuffered
重置为
True
后,问题就消失了


一般来说,当我在控件中看到奇数黑色矩形时,我将首先检查
ParentDoubleBuffered
设置。我看到您为两个网格启用了双缓冲。你有什么特别的理由这么做吗?如果您想避免在调整大小或单元更新过程中闪烁,这是很有帮助的。

我也可以重现您在XE3方面的问题。我将
ParentDoubleBuffered
重置为
True
后,问题就消失了


一般来说,当我在控件中看到奇数黑色矩形时,我将首先检查
ParentDoubleBuffered
设置。我看到您为两个网格启用了双缓冲。你有什么特别的理由这么做吗?如果您想避免在调整大小或单元更新过程中闪烁,这是很有帮助的。

我也可以重现您在XE3方面的问题。我将
ParentDoubleBuffered
重置为
True
后,问题就消失了




一般来说,当我在控件中看到奇数黑色矩形时,我将首先检查
ParentDoubleBuffered
设置。我看到您为两个网格启用了双缓冲。你有什么特别的理由这么做吗?如果您想避免在调整大小或更新单元格时出现闪烁,这会很有帮助。

我可以用给定的信息复制它。我花了2个小时来跟踪它。我认为这在我的定制TStringGrid库(特别是“Draw”方法)中是个问题。@SertacAkyuz哪个Delphi?使用XE。XE2似乎不会出现这种情况。选项
goEditing
goRowSelect
是互斥的。如果您选择了整行,您将如何编辑网格?我可以用给定的信息复制它。我花了2个小时来跟踪。我认为这在我的定制TStringGrid库(特别是“Draw”方法)中是个问题。@SertacAkyuz哪个Delphi?使用XE。XE2似乎不会出现这种情况。选项
goEditing
goRowSelect
是互斥的。如果您选择了整行,您将如何编辑网格?我可以用给定的信息复制它。我花了2个小时来跟踪。我认为这在我的定制TStringGrid库(特别是“Draw”方法)中是个问题。@SertacAkyuz哪个Delphi?使用XE。XE2似乎不会出现这种情况。选项
goEditing
goRowSelect
是互斥的。如果您选择了整行,您将如何编辑网格?我可以用给定的信息复制它。我花了2个小时来跟踪。我认为这在我的定制TStringGrid库(特别是“Draw”方法)中是个问题。@SertacAkyuz哪个Delphi?使用XE。XE2似乎不会出现这种情况。选项
goEditing
goRowSelect
是互斥的。如果选择了整行,您将如何编辑网格?设置ParentDoubleBuffered将覆盖DoubleBuffered(更确切地说,网格将使用父级的DoubleBuffered)。因此,如果将ParentDoubleBuffered设置为true,但不告诉我们父项的DoubleBuffered值是多少,这是毫无意义的。我们只能猜测父母的双重缓冲是错误的(因为事情发生了变化)。很高兴在延迟两年后听到你的回复;-)我记不起确切的原因了。我想我的观点是表单实际上已经将
双缓冲
设置为
。没有必要将所有内容设置为双缓冲。“没有必要将所有内容设置为双缓冲”-这是个人观点还是可以解释的?我认为Borland把这个属性放在那里是有目的的……所以,基本上你的意思是这是一个Delphi bug(‘未记录的特性’:))。只有禁用双缓冲?设置ParentDoubleBuffered将覆盖DoubleBuffered(更确切地说,网格将使用父级的DoubleBuffered),才能解决此问题。因此,如果将ParentDoubleBuffered设置为true,但不告诉我们父项的DoubleBuffered值是多少,这是毫无意义的。我们只能猜测父母的双重缓冲是错误的(因为事情发生了变化)。很高兴在延迟两年后听到你的回复;-)我记不起确切的原因了。我想我的观点是表单实际上已经将
双缓冲
设置为
。没有必要将所有内容设置为双缓冲。“没有必要将所有内容设置为双缓冲”-这是个人观点还是可以解释的?我以为