关于onKeyDown 的小问题(50分)

  • 主题发起人 主题发起人 PoeChan
  • 开始时间 开始时间
P

PoeChan

Unregistered / Unconfirmed
GUEST, unregistred user!
窗体上放2个Edit,使按F10时光标自动进入Edit2
Form1.KeyPreview 设为True
代码如下:
Form1.OnKeyDown(....);
begin
if (Key in [VK_F10]) then
Edit2.SetFocus;
end;

虽然按F10可以进入Edit2,但是必须在Edit2内按第二次键时才能输入!不知为什么?
 
Edit2.SetFocus只是让Edit2得到焦点,将Edit2.AutoSelect := True试试
 
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.KeyPreview:=true;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=vk_f10) then
edit2.SetFocus;
end;
一次通过。
 
不要用F10,它是windows的热键:跳离编辑窗口,用F2就没事了.
 
如果用就把这个键吃掉:
if (Key in [VK_F10]) then
begin
Key := 0;
Edit2.SetFocus;
end;
 
to PoeChan, ;
试试以下的方法:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (key=vk_f10) then
edit2.SetFocus;
end;

或者可以这样:
Form1.OnKeyDown(....);
begin
if (Key in [VK_F10]) then begin
key :=0;
Edit2.SetFocus;
end;
end;
你需要将key 的值改为0才行。这是因为反回值影响了相应事件处理。

 
多人接受答案了。
 
后退
顶部