我在一个from上放了一个panel,上面放了几个edit 
在edit的onKeyPress事件中加入如下代码:  
procedure TformProDept.m_editDeptKeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
  if Key = #13 then
    SelectNext(ActiveControl,True,False);
end;
希望可以实现在edit中回车时,焦点自动跳到下一个edit上(Edit Tab Order顺序已设好)
结果未能实现,跟踪发现焦点移到了panel上
如果不用panel则可以顺利实现.
问1.为什么会出现这种情况,(Edit Tab Order顺序中并没有panel啊);
  2.该如何解决(不要告诉我不用panel).
每答对一题30分:),先到先得!

解决方案 »

  1.   

    SelectNext(ActiveControl,True,False);改成:perform(WM_NEXTDLGCTL,0,0);试试,且FORM的keypreview属性为TRUE;
      

  2.   

    Use SetFocus(); is so easy!
      

  3.   

    你自己已经把方法写出来了!
    把你的代码改造一下就可以了
    procedure TformProDept.m_editDeptKeyPress(Sender: TObject; var Key: Char);
    begin
      inherited;
      if Key = #13 then
        SelectNext(ActiveControl,True,False);
      while ActiveControl is TPanel do
        SelectNext(ActiveControl,True,False);
    end;
      

  4.   

    你设taborder了吗?
    比如有两个PANEL,一个panel,taborder为0,上有3个edit,taborder分别为0,1,2。则在taborder为2的edit回车就会跳到另一PANEL上
      

  5.   

    procedure TformProDept.m_editDeptKeyPress(Sender: TObject; var Key: Char);
    begin
      inherited;
      if Key = #13 then
        if while ActiveControl is Tedit do
          begin
            key:=#0; 
            perform(WM_NEXTDLGCTL,0,0);
          end;
    end;
    且FORM的keypreview属性为TRUE;
      

  6.   

    to :  bingshi(碎石) 
    你说的很对,并且不用设FORM的keypreview属性为TRUE就已经可行了
    顺便问一下,perform这个函数的功能是什么,我看了一下帮助,没太懂
    为什么要设FORM的keypreview属性啊
    能解释一下么,我还想知道为什么会出现这种情况
    呵呵,有点贪心了,不过真要谢谢你,分是一定没问题的拉
      

  7.   

    to : crossbow(La Vida Es Amor)
    我是想在预设Edit Tab Order顺序的条件下让它自动指向下一个edit
    并不是想用edit.setFocus(),
    这样的话可以节省点代码嘛to : hety(笨菜阿诺德)
    我在只有一个panel的情况下也是如此阿,并且不论在edit*上都是这样
      

  8.   

    to : zwjchina(蒲石) 
    这样做的结果并不能指向下一个edit
    好像是指到了其他地方,因为我无法知道panel的tab order顺序的下一个是什么啊
    并且奇怪的是,tab order顺序中没有panel啊
    如果指向一个query 或image呢
      

  9.   

    所有的都是edit吗?
    哎~,你把想获得焦点的类列出来不就可以了!
    procedure TformProDept.m_editDeptKeyPress(Sender: TObject; var Key: Char);
    begin
      inherited;
      if Key = #13 then
        SelectNext(ActiveControl,True,False);
      while not (ActiveControl is TEdit) do
        SelectNext(ActiveControl,True,False);
    end;
      

  10.   

    这样肯定行。
    (把FORM的KeyPreview=true)
    在FORM的OnKeyPress事件加入
      if key = #13 then
        keybd_event(VK_TAB,0,0,0);
      

  11.   

    zwjchina(蒲石) 的方法应该可以实现
      

  12.   

    将SelectNext(ActiveControl,True,False);改成:perform(WM_NEXTDLGCTL,0,0);
    其他的就不用动了,即可
      

  13.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Edit1: TEdit;
        Edit2: TEdit;
        Edit3: TEdit;
        procedure Edit1KeyPress(Sender: TObject; var Key: Char);
        procedure Edit3KeyPress(Sender: TObject; var Key: Char);
        procedure Edit2KeyPress(Sender: TObject; var Key: Char);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if key=#13 then
        edit2.SetFocus;
    end;procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
    begin
    if key=#13 then
        edit1.SetFocus;
    end;procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
    begin
    if key=#13 then
        edit3.SetFocus;
    end;end.
      

  14.   

    这个也可以的,procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
    begin
    inherited;
      if Key = #13 then
         perform(WM_NEXTDLGCTL,0,0);
      while not (ActiveControl is TEdit) do
        perform(WM_NEXTDLGCTL,0,0);
    end;
      

  15.   

    首先谢谢各位的解答,问题已经可以解决,如下:
    直接换成 perform(WM_NEXTDLGCTL,0,0);就可以to:zwjchina(蒲石)
    并不是只有edit,可能还有combobox之类的呢to :  yanxiaokang(yanxiaokang) 
    我是想在预设Edit Tab Order顺序的条件下让它自动指向下一个edit
    并不是想用edit.setFocus(),
    这样的话可以节省点代码嘛
    ----我已经回复crossbow(La Vida Es Amor)一遍了,但还是谢谢你
      

  16.   

    我还是非常想弄清楚这个问题,为什么在form上可以正常运行,而在panel上就出错呢,
    并且tab order中没有panel啊我想问为什么perform可以做到,麻烦各位了.
      

  17.   

    设一下edit1的老爸为panel1就可以了。。
      

  18.   

    你没有设FORM的keypreview属性为TRUE是因为你的吧每一个控件的KeyPress事件都加代码了!其实只给Form的KeyPress事件加上诉代码就可以了。perform是执行的意思,它的参数是消息类型的,所以是Form截获了Windows的消息嘛。