我使用的是Windows 10和西雅图。
我尝试更改tStringGrid.RowCount而不运行onSelectCell事件,因为当没有单击或选择单元格时,不应该运行某些内容。
有时候更改tStringGrid.RowCount将触发tStringGrid onSelectCell事件。在使用默认tStringGrid实现以下代码后,单击表单 - >点击按钮 - >单击行索引大于0的任何单元格 - >再次单击该表单,然后在最后一次单击表单事件时触发onSelectCell事件。
我想知道这是一个错误还是我误解了一些东西。在前一种情况下,我需要绕过,我可以,在后一种情况下,请让我知道解决问题的原因。
procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.RowCount := 5;
end;
procedure TForm1.FormClick(Sender: TObject);
begin
StringGrid1.RowCount := 1; // at the second time this fires tStringGrid.onSelectCell Event
end;
procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer; var CanSelect: Boolean);
begin
Memo1.Lines.Add(IntToStr(ACol) + ' ' + IntToStr(ARow));
end;
答案 0 :(得分:1)
您报告的行为很自然。减少行数时,如果要删除包含所选单元格的行,则必须选择新单元格。这里的逻辑是选择最后剩余行中的单元格,并且不修改所选列。由于选择了新单元格,因此会触发OnSelectCell
事件。
这不是错误。这种行为是明智的,也是按照设计的。
如果您希望在执行某些操作时取消OnSelectCell
事件,请暂时将其禁用。
StringGrid1.OnSelectCell := nil;
try
// do stuff that might change the selection
finally
StringGrid1.OnSelectCell := StringGrid1SelectCell;
end;