0

A. VCL フォーム アプリケーションを作成します。

B. フォームに 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 に変更されました。

ここに画像の説明を入力

では、フォーカスされた ListBox コントロールで BACKSPACE キーが処理されないようにし、ListBox の選択を変更するにはどうすればよいでしょうか。

Delphi 10.1 ベルリン アップデート 2
Windows 7 x64 SP1

4

1 に答える 1

2

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

于 2016-12-03T23:33:08.057 に答える