Delphi 字符串网格刷新

gfttwv5a  于 2023-02-19  发布在  其他
关注(0)|答案(1)|浏览(182)

学习 Delphi (还有很长的路要走),使用里约。
我知道了如何在TStringGrid行中使用彩色背景-但看起来我需要在这些行中的数据更改时刷新(以便根据数据更改显示不同的颜色)。
我以为只要将单元格的值设置为它们当时存在的值就会导致刷新,但事实并非如此。我可以肯定地说,它没有-因为我在StringGrid1DrawCell过程中放置了一个调试断点-而且那个断点没有被命中。
我希望在TStringGrid中使用的刷新代码如下所示(注意:将S定义为String):

S := StringGrid1.Cells[1, i];
StringGrid1.Cells[1, i] := S;

基本假设(仅设置/重置单元格内容的值会导致刷新)是否错误?
如果想法是对的,但方法是错的:您能告诉我该怎么做吗?

zy1mlcev

zy1mlcev1#

仅当需要在屏幕上绘制给定单元格时,才会激发OnDrawCell事件。
设置特定单元格的值将只使该单元格无效,从而只触发该单元格的重画,而不是单元格的整行或整个网格。
如果需要触发整行的重绘,调用网格的(受保护的)InvalidateRow()方法,例如:

type
  TStringGridAccess = class(TStringGrid)
  end;
...
StringGrid1.Cells[1, i] := ...;
TStringGridAccess(StringGrid1).InvalidateRow(i);

如果需要触发整个网格的重画,调用网格的(public)Invalidate()方法,例如:

StringGrid1.Cells[1, i] := ...;
StringGrid1.Invalidate;

相关问题