在CLX TEdit的KeyPress事件中拦截TAB键

时间:2013-06-02 06:26:20

标签: delphi delphi-7 clx

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

如何拦截TEdit Control的KeyPress事件上的TAB键?

1 个答案:

答案 0 :(得分:0)

编辑事件不适用于导航键Tab,因为它们不会触发键盘事件。唯一指向这一事实的地方。 Delphi Help TCustomForm.KeyPreview

在表格和TMemo上测试3 TEdit(CLX) Tab键顺序为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

enter image description here

例如:在Edit3KeyUp事件中,您可以向Edit2.Text添加#9。

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

enter image description here