Обработка ключей с помощью KeyPreview в TForm.OnKeyDown не работает с TListBox
А. Создайте приложение VCL Forms.
Б. Поместите TListBox в форму и заполните некоторые элементы во время разработки, например:
C. Установите форму KeyPreview
собственность на True
:
D. в форме OnKeyDown
обработчик события напишите этот код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = VK_BACK then
begin
if ListBox1.Focused then
begin
Key := 0;
CodeSite.Send('ListBox1 is focused!');
end;
end;
end;
E. Запустите программу и выберите Item5, нажав на нее:
Теперь ListBox1 имеет фокус.
F. Теперь нажмите клавишу BACKSPACE. Предположительно, установка Key := 0;
в форме OnKeyDown
обработчик событий должен блокировать обработку ключа BACKSPACE элементом управления ListBox1. Но это не работает, как вы можете видеть: клавиша BACKSPACE вызвала изменение выбора с Item5 на Item1:
Итак, как я могу предотвратить обработку клавиши BACKSPACE в выделенном элементе управления ListBox и изменить выбор ListBox?
Delphi 10.1 Berlin Обновление 2
Windows 7 x64 SP1
1 ответ
Использовать OnKeyPress
событие вместо:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #8 then
begin
if ListBox1.Focused then
begin
Key := #0;
CodeSite.Send('ListBox1 is focused!');
end;
end;
end;
Вы не можете всегда блокировать все в OnKeyDown
,