在数据输入窗体中,如何用回车键代替Tab键使输入焦点在不同的Edit控件之间切换?
我知道的方法是在每个Edit控件的OnKeyPress时间中加入如下代码:
  if (Key=#13) then
    begin
      key:=#0;
      perform(WM_NEXTDLGCTL,0,0);
    end;但是如果Edit控件很多,这样就很麻烦,不知有没有其他方法?请赐教

解决方案 »

  1.   

    procedure Tform1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if key=#13 then
      Edit2.SetFocus;
    end;
    SetFocus就是輸入的焦點
      

  2.   

    ls2008(結婚了吧,傻B了吧) :
      这样不还是要对每个Edit写代码吗?
      

  3.   

    我也经常遇到这个问题就是没有自习考虑过,今天看到这张帖子想了一个方法不过比较笨,通用性不是很强,大家看看可不可以满足要求
    以edit1...edit9为例,见他们的onkeypess事件都设为Edit9KeyPress,代码如下:
    procedure TForm1.Edit9KeyPress(Sender: TObject; var Key: Char);
    var
      temp:string;
      i:Integer;
    begin
      if Key=#13 then
      begin
        temp:=copy((Sender as TEdit).Name,5,2);
        i:=StrToInt(temp);
        if i=9 then
        Edit1.SetFocus
        else begin
          inc(i,1);
          TEdit(self.FindComponent('edit'+IntToStr(i))).SetFocus;
        end;
      end;
    end;
      

  4.   

    为什么不在 Form 的 KeyPress 事件中处理呢?
    设置 Form 的 KeyPreview 为真,然后用你的代码来处理。
      

  5.   

    谢谢大家,我的问题解决了,方法同  CloneCenter(复制中心)  的,
    我以前忘了将Form的KeyPreview设为真,走了不少弯路再次谢谢大家的帮助!!
      

  6.   

    楼主,你只要把Form的Keypreview属性设为真,然后写如下代码就可以了。
    procedure Tfmtest.FormKeyPress(Sender: TObject; var Key: Char);
    begin
      if key = #13 then
        begin
          key := #0;
          perform(wm_nextdlgctl, 0, 0);
        end;end;
      

  7.   

    我K
    给一个最牛B的方法,Form1.Keypreview:=true
    procedure Tfrm_.FormKeyPress(Sender: TObject; var Key: Char);
    begin
    if Key = #13 then
    begin
       Key := #0;
       Keybd_Event(Vk_Tab, 0, 0, 0);
    end;
    end;以上的方法有些是行的,但有一个最大的弊端,就就shift+回车就无能为力了
      

  8.   

    Keybd_Eventk可以响应任何组合键的,但是楼上的好象没有释放Vk_Tab哟
      

  9.   

    我同意 chenshaizi(陈绍彬) 程序
      

  10.   

    Form1.Keypreview:=true
    procedure Tfrm_.FormKeyPress(Sender: TObject; var Key: Char);
    begin
    if Key = #13 then
    begin
       Key := #0;
       Keybd_Event(Vk_Tab, 0, 0, 0);
    end;
    end;
      

  11.   

    可以用API sendmessage( postmessage) 进行处理
      

  12.   

    对用frmform.Create(self)创建的mdi子窗体无效?!
      

  13.   


    procedure TFRBMCL.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      IF KEY=13 THEN
        IF screen.ActiveControl is TEdit  THEN
        BEGIN
          key:=0;
          Perform(WM_NEXTDLGCTL, 0, 0);
        END;
    end;解决了!
      

  14.   

    你们的问题解决了!但我有个问题!那就是如果那些TEdit控件是在TPanel控件里面的话!那怎么去实现啊?我用ChinaChargin(阿华) 的方法不行的!