我有一个TEdit(VisualCLX组件),我想在onKeyPress事件中覆盖TAB键的行为,但是如果我尝试拦截KeyPress事件中的TAB键,它就不起作用,因为事件不是在TEdit上按Tab键时触发。
如何拦截TEdit Control的KeyPress事件上的TAB键?
答案 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;
按shift键
备注1显示
Edit1KeyUp
Edit1KeyUp
按标签
备注1显示
Edit2KeyUp
按标签
Edit2.SetFocus;
备注1显示
Edit3KeyUp
因此,使用TAB键,用户永远不会离开edit2
例如:在Edit3KeyUp事件中,您可以向Edit2.Text添加#9。
if Key = VK_TAB then begin
Edit2.SetFocus;
Edit2.Text := Edit2.Text+#9+'<- a Tab here';
end;