Delphi Rio中TStringGrid刷新问题:重置单元格值无法触发重绘?
Delphi Rio TStringGrid 行背景色刷新问题解答
你的假设是错误的:当你将单元格值设为与原有内容完全相同的字符串时,TStringGrid内部会检测到值未发生变更,不会触发重绘逻辑,自然也不会触发StringGrid1DrawCell事件,所以断点不会触发,背景色也不会更新。
正确的解决方法
- 强制重绘(推荐):直接调用重绘方法,这是最直接高效的方式
- 刷新整个StringGrid:
StringGrid1.Invalidate; - 仅刷新指定行(性能更优,适合只需要更新单行的场景):
StringGrid1.InvalidateRow(i);
- 刷新整个StringGrid:
- 通过修改单元格值触发(不推荐):如果一定要通过修改值触发,需要先设置一个临时不同的值,再改回原内容,让控件检测到值变更:
var S: string; begin S := StringGrid1.Cells[1, i]; StringGrid1.Cells[1, i] := ''; // 设置临时值触发变更 StringGrid1.Cells[1, i] := S; end;
内容的提问来源于stack exchange,提问作者user2372039
相关产品推荐
相关产品推荐

