楼上是对的procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = 13 then Button1.Click; end;procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = 13 then Button2.Click; end;
同意楼上。不过我更习惯这样写 procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = 13 then Windows.PostMessage(bt1.Handle,BM_CLICK,0,0) end; procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = 13 then Windows.PostMessage(bt2.Handle,BM_CLICK,0,0) end;这样的话,这个过程可以立即结束,然后消息路由才启动按钮的按下事件。 楼上直接在编辑控件的事件里调用按钮的按下事件也不错, 不过缺点就是编辑框的事件(OnKeyPress,OnKeyDown/Up)必须等待按钮的OnClick时间先结束才能结束。 这样某些代码上下文要求先后顺序的处理的逻辑可能存在潜在问题。 所以我习惯用postmessage的方法,这样代码的执行先后逻辑不会改变。 哈哈,个人看法,莫批我
还有就是 设置Button的setfocus
3楼方法的特点是,可能会使Edit.OnKeyUp里的代码被跳过不执行...
比如这样试试: procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if Key = 13 then Button1.Click;{换成下句测试一下} //PostMessage(Button1.Handle, BM_CLICK, 0, 0); end;procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Add('Button1 Clicked'); end;procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin Memo1.Lines.Add('Edit1 KeyUP'); end;
在Edit1的keypress事件中执行 btn1的click事件代码 if key = #13 then btn1Click(self)
判断按键是否为回车键,如果是的话,就执行对应的按钮的事件。
执行对应按钮的事件的方法有多种,
可以单独写一个方法,按键按下的时候和按钮按下的时候都调用这个方法。
或者直接在OnKeyDown事件中调用btnOnClick
Shift: TShiftState);
begin
if Key = 13 then Button1.Click;
end;procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then Button2.Click;
end;
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = 13 then
Windows.PostMessage(bt1.Handle,BM_CLICK,0,0)
end; procedure TForm1.Edit2KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if Key = 13 then
Windows.PostMessage(bt2.Handle,BM_CLICK,0,0)
end;这样的话,这个过程可以立即结束,然后消息路由才启动按钮的按下事件。
楼上直接在编辑控件的事件里调用按钮的按下事件也不错,
不过缺点就是编辑框的事件(OnKeyPress,OnKeyDown/Up)必须等待按钮的OnClick时间先结束才能结束。
这样某些代码上下文要求先后顺序的处理的逻辑可能存在潜在问题。
所以我习惯用postmessage的方法,这样代码的执行先后逻辑不会改变。
哈哈,个人看法,莫批我
比如这样试试:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = 13 then
Button1.Click;{换成下句测试一下}
//PostMessage(Button1.Handle, BM_CLICK, 0, 0);
end;procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add('Button1 Clicked');
end;procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
Memo1.Lines.Add('Edit1 KeyUP');
end;
if key = #13 then btn1Click(self)