Почему Delphi StringGrid иногда вызывает событие OnClick
после OnKeyDown
?TStringGrid: Почему OnClick после OnKeyDown
Debugging скриншот:
Мой OnKeyDown обработчик события:
var
Top: Integer;
Bottom: Integer;
CurrentRow: Integer;
begin
Top := Grid.TopRow;
Bottom := Grid.TopRow + Grid.VisibleRowCount - 1;
if (Key = 38) then CurrentRow := Grid.Row - 1
else if (Key = 40) then CurrentRow := Grid.Row + 1;
// Disable OnClick because sometimes a 'TStringGrid.Click' is called anyway...
// (when clicking on form top window bar and navigating)
Grid.OnClick := nil;
if (CurrentRow < Top - 1) or (CurrentRow > Bottom + 1) then begin
if (Key = 38) then Grid.Row := Bottom
else if (Key = 40) then Grid.Row := Top;
end;
Grid.OnClick := GridClick;
end;
Edit:
Это кажется 'OnClick' не увольняют, когда последняя строка выбирается и нажимает «Вниз» или когда выбрана первая линия и нажимается «Вверх».
Способ воспроизведения:
Добавить TStringGrid в форму и заполнить несколько строк. Добавьте обработчик OnClick и OnKeyDown. В этих двух методах обработчика не нужно добавлять специальный код. Выберите строку в stringgrid в форме и нажмите стрелку вверх или вниз на клавиатуре.
Edit 2:
Это не решение, но, чтобы предотвратить код «OnClick» выполняется после нажатия кнопки вверх, вниз, ВВЕРХ или ВНИЗ, я установить переменную в «OnKeyDown» что нажата клавиша и проверьте эту переменную в «OnClick».
Edit 3:
Обновлено трассировки стека и способ воспроизведения.
Какая версия Delphi? В «TCustomGrid.KeyDown» в XE3 нет ничего, что вызывает «TControl.Click». И было бы слишком много, чтобы попросить способ воспроизвести это? –
Delphi XE3. Я добавил способ воспроизвести это описание. – user729103
Ваше воспроизведение неполное. Какие ключи вам нужно нажать? Опишите точные шаги по воспроизведению. –