有两个edit1,edit2,两个按钮btn1,btn2,edit1 输入数值后,点击btn1 赋值,edit2 输入数值后,点击btn2 赋值,想实现当edit1输入数值后,按回车相当于点击btn1,当edit2输入数值后,按回车相当于点击btn2,
这两个会不会冲突,该怎么实现?谢谢

解决方案 »

  1.   

    分别使用两个Edit的OnKeyDown事件。
    判断按键是否为回车键,如果是的话,就执行对应的按钮的事件。
    执行对应按钮的事件的方法有多种,
    可以单独写一个方法,按键按下的时候和按钮按下的时候都调用这个方法。
    或者直接在OnKeyDown事件中调用btnOnClick
      

  2.   

    楼上是对的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;
      

  3.   

    同意楼上。不过我更习惯这样写
    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的方法,这样代码的执行先后逻辑不会改变。
    哈哈,个人看法,莫批我
      

  4.   

    还有就是 设置Button的setfocus
      

  5.   

    3楼方法的特点是,可能会使Edit.OnKeyUp里的代码被跳过不执行...
      

  6.   


    比如这样试试:
    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;
      

  7.   

    在Edit1的keypress事件中执行 btn1的click事件代码
    if key = #13 then btn1Click(self)