Я использую окна 10 и сиэтл.Как запретить непредвиденный запуск tStringGrid onSelectCell
Я пытаюсь изменить 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;
Это имеет смысл, и это не ошибка. Это недостаток в вашем понимании того, что происходит. :-) Щелчок кнопки увеличивает количество строк, и выбор становится одной из новых строк. Затем вы нажимаете на форму, которая удаляет все строки, кроме 1; если выделение> 0, оно должно куда-то идти, и оно генерирует событие OnSelectCell. Если вы не хотите, чтобы это произошло, отключите событие OnSelectCell перед изменением RowCount. –
Когда вы уменьшаете количество строк, вы можете удалить выбранную ячейку. Если вы не хотите, чтобы событие срабатывало, временно отключите его. –
@KenWhite Если щелчок кнопки делает выбор, то почему первая нажатие кнопки не загорается? Без нажатия кнопки, щелчок клика по ячейке -> не запускает событие onSelectCell. В этом случае выбирается только ячейка, но уменьшение количества строк не вызывает события. –