有两个TEdit,开始焦点在Edit1中
点击Edit2,焦点从Edit1跳到Edit2,
此时触发Edit1的OnExit事件,在处理过程中显示一个模式窗口用于显示处理进度,处理结束后这个模式窗口会自动关闭。
但是,发现Edit2并未获得输入焦点。如果在OnExit中关闭模式窗口后调用Edit2.SetFocus
输入焦点确实在Edit2中可以输入文本,但是不显示光标。
从Edit2中离开时也不会触发其OnExit事件。这种情况下,怎么让Edit2能够显示光标,并且在离开时触发OnExit事件呢?
除了SetFocus之外,是不是还要发送什么消息啊!?
用的是Delphi 7

解决方案 »

  1.   

    检查一下EDIT所在的form的OnActivate事件,那个进度窗口关闭后,回到原窗口时触发了该事件
      

  2.   

    Edit1的onExit事件中:Edit2.SetFocus;
    Edit2.SelLength:=0;
    Edit2.SelStart:=length(Edit1.Text);
      

  3.   

    dongliu(竹子)的方法无效,已经试过:(
    其实输入焦点还是在Edit2中的,此时输入文本也会正常显示。
    但是似乎没有DoEnter,所以之后也不会触发OnExit事件。进度窗口是自动关闭的,不会触发form的OnActivate事件。
    smiler007(笑一笑)的提示也没用。做了一个很简单的窗口,就两个Edit和一个会自动关闭的弹出窗口。
    两个Edit的OnExit用同一个处理
    procedure TForm1.Edit2Exit(Sender: TObject);
    var
      newFocus: TWinControl;
    begin
      form3.ShowModal;
    end;
    会发现一个很有趣的现象。
    第一次从Edit1跳到Edit2,触发OnExit,光标正常但是无法输入
    从Edit2跳回Edit1,触发OnExit,光标也回到Edit1,还是无法输入
    再次试图跳到Edit2,光标并不过来,也不触发OnExit,并且选择Edit2的文本,Edit1的光标会跟着走!
    是不是Delphi的一个Bug?还是OnExit事件的代码有什么限制条件。
    怀疑焦点转换的顺序有问题。
      

  4.   

    按理form的OnActivate事件应该出现,现在没出现,说明form没有被激活,要写api激活它
      

  5.   

    to fjx99(fjx99)
    这个可能和窗口显示的方式有关系
    用ShowModal来显示,form1窗口的焦点其实没有被移走,
    form3应该相当于form1内嵌的一个控件
    试了在代码中form1.SetFocus,结果还是一样:(
      

  6.   

    记得以前有位老兄提出过这问题 
    好像是delphi的bug
      

  7.   

    发现Edit2并未获得输入焦点?
    控制onkeypress可以的
      

  8.   

    procedure TForm1.Edit1Exit(Sender: TObject);
    var
      f:tform;
    begin
      f := tform.Create(self);
      f.ShowModal;
    end;
    我试过,可以啊,是不是你的modal窗口有问题
      

  9.   

    to: flyinwuhan(制怒·三思而后行)
    看来是bug,有没有相关补丁?to: whbo(王红波)
    不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
    我是想在新属性完全输入之后将修改一次提交过去。to: XuDunYu(西门吹雪)
    你用的什么版本的?
    我用application.messagebox也有问题
      

  10.   

    没有听说。。相关补丁创建modal窗口有两种办法,一种是application.createform(...
    另一种是:f:tform;
    begin
      f := tform.Create(self);
      f.ShowModal;
    你试一下第二种有没有问题?
      

  11.   

    to: whbo(王红波)
    不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
    我是想在新属性完全输入之后将修改一次提交过去。
    //可以让这个onKeyPress成为共用的事件
      

  12.   

    我也碰到过,可能是个BUG
    建议不要用模式窗体显示进程,在同一窗体显示就没有问题,主要是避免在ONEXIT事件里弹出窗口.
      

  13.   

    嗯,看来只能放弃模式窗口了。
    留待以后研究。还发现一个有趣的情况。这样跳转到Edit2的时候,如果点击右键显示弹出菜单,然后取消,
    还是有可能让Edit2恢复到正常状态的。