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

标签 delphi delphi-7 clx

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

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

最佳答案

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

要测试,请在表单上放置 3 个 TEdit (CLX) 和一个 TMemo。
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 Tab

    • 光标移至编辑1字段
    • Memo1 显示

      编辑1KeyUp
      Edit1KeyUp

  • 按 Tab 键

    • 光标移至编辑2字段
    • Memo1 显示

      编辑2KeyUp

  • 按 Tab 键

    • 光标尝试移动到编辑3字段
    • 使用命令Edit2.SetFocus;
      我们将光标发送回 edit2
    • Memo1 显示

      Edit3KeyUp

因此,使用 TAB 键,用户永远无法离开 edit2

enter image description here

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

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

enter image description here

关于delphi - 在 CLX TEdit 的 KeyPress 事件中拦截 TAB 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16880362/

相关文章:

sockets - 为什么TTcpClient丢弃SendStream()上的数据?

lisp - 如何使用 clx 设置 linux 壁纸

delphi - 避免在TPageControl上当前页面下方的页面上传播点击

delphi - 在 VisualCLX 表单中过滤(禁用)鼠标滚轮消息

delphi - 将结果从 ReportMemoryLeaksOnShutdown 重定向到日志文件

delphi - JclMapi映射一般失败

Delphi - 如何对表单进行换肤

delphi - 如何使用 TypInfo 单元获取 'record' 类型的属性

delphi - 如何在 Chromium 组件上覆盖图像

delphi - 是否可以在 Windows 中禁用 Ctrl+V?