怎么实现回车相当于点击按钮

clever_newlearning 2009-06-13 07:02:50
有两个edit1,edit2,两个按钮btn1,btn2,

edit1 输入数值后,点击btn1 赋值,

edit2 输入数值后,点击btn2 赋值,

想实现当edit1输入数值后,按回车相当于点击btn1,

当edit2输入数值后,按回车相当于点击btn2,


这两个会不会冲突,该怎么实现?

谢谢
...全文
170 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jack_Yin 2009-06-23
  • 打赏
  • 举报
回复
在Edit1的keypress事件中执行 btn1的click事件代码
if key = #13 then btn1Click(self)
chinamis2008 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhoutler 的回复:]
同意楼上。不过我更习惯这样写
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;

这样的话,这个过程可以…
[/Quote]

学习了!
支持中文哦 2009-06-14
  • 打赏
  • 举报
回复
同意楼上。不过我更习惯这样写
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的方法,这样代码的执行先后逻辑不会改变。
哈哈,个人看法,莫批我


chain0509 2009-06-14
  • 打赏
  • 举报
回复
还有就是 设置Button的setfocus
lihuasoft 2009-06-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lihuasoft 的回复:]
3楼方法的特点是,可能会使Edit.OnKeyUp里的代码被跳过不执行...
[/Quote]

比如这样试试:


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;
lihuasoft 2009-06-14
  • 打赏
  • 举报
回复
3楼方法的特点是,可能会使Edit.OnKeyUp里的代码被跳过不执行...
lihuasoft 2009-06-13
  • 打赏
  • 举报
回复


楼上是对的

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;
AsheBin 2009-06-13
  • 打赏
  • 举报
回复
分别使用两个Edit的OnKeyDown事件。
判断按键是否为回车键,如果是的话,就执行对应的按钮的事件。
执行对应按钮的事件的方法有多种,
可以单独写一个方法,按键按下的时候和按钮按下的时候都调用这个方法。
或者直接在OnKeyDown事件中调用btnOnClick

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧