我正在用Delphi一个小问题:
在一个Project中有三个窗体,
一个是frmLogin,      登录窗体    formstyle为fsNormal
一个是frmMain,       母窗体      formstyle为fsMDIForm
一个是frmPersonList,  子窗体      fromstyle为fsMDIChild意图是:在登录框中输入用户名、密码
        然后登录主窗体,
        在母窗体的子窗体中进行一些功能操作~错误现象:根本无法编译运行,错误提示为
Project Project1.exe raised exception class EInvalidOperation with message 'Cannot create form.No MDI forms are currently active'.Process stopped.Use Step or Run to continue.相应代码如下:
project.dpr 
begin
  //创建登录窗体
  Application.CreateForm(TfrmLogin, frmLogin);
  frmLogin.show;
  Application.Run;
end.frmLogin.pas 登录窗体
procedure TfrmLogin.Button1Click(Sender: TObject);
begin
  //登录窗体代码中创建母窗体
  Application.CreateForm(TfrmMain, frmMain);
  frmMain.show;
  frmLogin.hide
end;frmMain.pas 母窗体
procedure TfrmMain.FormShow(Sender: TObject);
begin
  //想在母窗体代码中创建子窗体,不过失败了
  Application.CreateForm(TfrmPersonList, frmPersonList);//问题就处在这里
end;
end.请点解,谢谢。我以前用VB的,刚刚用Delphi。
问题描述的不是很清晰,不好意思。

解决方案 »

  1.   

    project.dpr 
    begin
      //创建登录窗体
      Application.CreateForm(TfrmLogin, frmLogin);
      frmLogin.show;
      Application.Run;
    end.
    //????????????????????????????????????????????????????????
    //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    //窗体不创建就Show当然是不行的
      

  2.   

    子窗体不要设置成动态创建,
    在创建父窗体时就会自动产生子窗体,
    在父窗体的OnShow()事件中动态创建子窗体,好象会出错.
      

  3.   

    或者是另一个原因:
      子窗体不能用Application.CreateForm来创建,
    改成:
      frmPersonList:=TfrmPersonList.create(self);
      frmPersonList.show();
      

  4.   

    to  li_zhifu(东北人):frmLogin和frmMain的出现有先后顺序。
                         如果frmLogin和frmMain一起创建,他们就会一起显示出来了,
                         而我的本意是先显示frmLogin,填写用户名密码验证通过后,
                         frmLogin隐藏,进入系统,frmMain再显示出来to zhangheaaa(竹) :如果我不设置成动态创建,就会在登录后只显示母窗体而不显示子窗体                   使用frmPersonList:=TfrmPersonList.create(self)还是不行
      

  5.   

    project.dpr 
    begin
      //创建登录窗体
      with TfrmLogin.Create(Application) do
      begin
        ShowModal;
        Free;
      end;
      Application.CreateForm(TfrmMain, frmMain);
      Application.Run;
    end.在frmLogin中判断用户名是否合法,如果合法则正常关闭frmLogin即可,不合法可出提示并返回或用Halt来退出应用程序