如何禁止意外的tStringGrid onSelectCell事件触发
我使用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;
你报告的行为是自然的。 当您减少行数时,如果要删除包含所选单元格的行,则必须选择一个新单元格。 这里的逻辑是选择最后剩余行中的一个单元格,并且所选列未被修改。 由于选择了新的单元格,因此会触发OnSelectCell
事件。
这不是一个错误。 行为是明智的,并且按照设计。
如果您希望在执行某些操作时禁止OnSelectCell
事件,请暂时禁用它。
StringGrid1.OnSelectCell := nil;
try
// do stuff that might change the selection
finally
StringGrid1.OnSelectCell := StringGrid1SelectCell;
end;
链接地址: http://www.djcxy.com/p/50639.html
上一篇: How to prohibit an unintended tStringGrid onSelectCell event firing