我建立了一个MDI主窗口(Form1),在启动时要自动弹出一个普通窗口(Form2用于密码验证),这些都已经实现,现在的问题是:测试时,焦点不在普通窗口里,却在MDI主窗口上,我在普通窗口的OnCreate里加入了,Edit1.SetFocus;,可系统报错,不知道为什么??谁可以帮我解决一下,给我贴上代码!!或发给我个例子都行!!!谢谢了。
E-Mail:[email protected]另外,我是在MDI主窗体的OnShow里Form2.Show的,Form2为系统启动,不是手动的,不知道和这些有关吗???

解决方案 »

  1.   

    在OnCreate里是不能加入了XXXXXX.SetFocus;
    因为这时什么控件都不能得到焦点!!!!!
    Form2请用ShowModal,而不要用Show就可以了!
      

  2.   

    另外,你可以将密码验证写在OnActivate中,再加上一句:OnActivate:=nil;
    保证以后不会再来执行这段程序。
    procedure TFMain.FormActivate(Sender: TObject);
    begin
      OnActivate := nil;
      //建立连接
      CreateConnect;
      //取系统设置
      GetSysSet;
      //建立菜单系统
      CreateMenuSystem;
      //弹出用户登录界面
      myLogin;
    end;
      

  3.   

    function myLogin(): Integer;
    var
      myForm : TLoginForm;
    begin
      myForm := nil;
      try
        myForm := TLoginForm.Create(Application.MainForm);
        myForm.Position := poScreenCenter;
        Result := myForm.ShowModal;
      finally
        myForm.Free;
      end;
    end;
      

  4.   

    谢谢了 liang_z(千山一刀之忍者神龟) 实验中。
      

  5.   

    form2.showmodal;procedure Tform2.onformshow();
    begin
      Edit1.SetFocus;
    end;
      

  6.   

    to  liang_z(千山一刀之忍者神龟)和 belllab(bell)  :你的代码是可以,但是如果用了ShowModalde的话,它是先启动密码验证窗口,通过验证才可以启动MDI主窗口。是想的是在MDI主窗口里启动密码验证窗口,主窗口被 ENABLED:=FALSE;只有通过验证主窗口才被
    ENABLED:=TRUE;所以会出现焦点总在MDI主窗口上????如何解决???