2

TEdit (VisualCLX コンポーネント) があり、onKeyPress イベントで TAB キーの動作をオーバーライドしたいのですが、KeyPress イベントで TAB キーをインターセプトしようとしても機能しません。 Tab キーが TEdit で押されます。

TEdit Control の KeyPress イベントで TAB キーをインターセプトするにはどうすればよいですか?

4

1 に答える 1

0

Tabナビゲーション キーはキーボード イベントをトリガーしないため、編集イベントはナビゲーション キーには適用されません。この事実を指摘する唯一の場所。Delphi ヘルプ TCustomForm.KeyPreview

テストするには、フォームに 3 つの TEdit (CLX) と TMemo を配置します。
タブ オーダーは Edit1、Edit2、Edit3
です。使用できる唯一のイベントは KeyUp イベントです。

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    Memo1.Lines.Add('Edit1KeyUp');
end;

procedure TForm1.Edit2KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    Memo1.Lines.Add('Edit2KeyUp');
end;

procedure TForm1.Edit3KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    Memo1.Lines.Add('Edit3KeyUp');
    if Key = VK_TAB then begin
       Edit2.SetFocus;
    end;
end;
  • Edit2入力フィールドにカーソルを置きます
  • シフトタブを押す

    • カーソルがフィールド edit1 に移動します
    • メモ1ショー

      Edit1KeyUp
      Edit1KeyUp

  • タブを押す

    • カーソルがフィールド edit2 に移動します
    • メモ1ショー

      Edit2KeyUp

  • タブを押す

    • カーソルがフィールド edit3 に移動しようとします
    • コマンドEdit2.SetFocus;
      を使用して、カーソルを edit2 に戻します。
    • メモ1ショー

      Edit3KeyUp

したがって、TAB キーを使用すると、ユーザーは edit2 を離れることはできません

ここに画像の説明を入力

例: Edit3KeyUp イベントでは、#9 を Edit2.Text に追加できます。

    if Key = VK_TAB then begin
       Edit2.SetFocus;
       Edit2.Text := Edit2.Text+#9+'<- a Tab here'; 
    end;

ここに画像の説明を入力

于 2013-06-03T01:11:56.657 に答える