我有一个 TEdit(VisualCLX 组件),我想覆盖 onKeyPress 事件中 TAB 键的行为,但是如果我尝试拦截 KeyPress 事件中的 TAB 键,它将不起作用,因为当在 TEdit 上按下 Tab 键。
如何拦截 TEdit Control 的 KeyPress 事件上的 TAB 键?
编辑事件不适用于导航键Tab
因为这些不会触发键盘事件。唯一指出这一事实的地方。Delphi 帮助 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 选项卡
- 光标移动到编辑1字段
-
备忘录1显示
编辑1按键
编辑1按键
-
按标签
-
按标签
- 光标尝试移动到编辑3字段
- 用命令
Edit2.SetFocus;
我们将光标发送回 edit2
-
备忘录1显示
编辑3键向上
因此,使用 TAB 键,用户永远无法离开 edit2
例如:在 Edit3KeyUp 事件中,您可以将 #9 添加到 Edit2.Text。
if Key = VK_TAB then begin
Edit2.SetFocus;
Edit2.Text := Edit2.Text+#9+'<- a Tab here';
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)