【问题标题】:Intercept TAB key in KeyPress event of a CLX TEdit在 CLX TEdit 的 KeyPress 事件中拦截 TAB 键
【发布时间】:2013-06-02 06:26:19
【问题描述】:

我有一个 TEdit(VisualCLX 组件),我想在 onKeyPress 事件中覆盖 TAB 键的行为,但是如果我尝试在 KeyPress 事件中拦截 TAB 键,它不起作用,因为该事件不是在 TEdit 上按下 tab 键时触发。

如何在 TEdit 控件的 KeyPress 事件中截获 TAB 键?

【问题讨论】:

  • 你想用它实现什么?
  • 我想覆盖标签页的默认行为...

标签: delphi delphi-7 clx


【解决方案1】:

编辑事件不适用于导航键Tab,因为它们不会触发键盘事件。唯一指向这一事实的地方。 Delphi Help 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 输入字段中
  • 按shift键

    • 光标移动到字段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;

【讨论】:

  • 我从未与 CLX 合作过。 CLX 和 VCL 的关键行为有什么区别?
  • @felipe.zkn :没有使用“CLX”,所以我不知道确切的区别。但是 TAB 是由应用程序管理的!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 2012-05-15
  • 1970-01-01
  • 2022-01-15
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多