我新建了三个窗体,第一个为普通窗体,第二个为MDIFORM窗体,第三个为MDICHILD窗体,在APPLICATION中创建第一个窗体,在第一个窗体按一BUTTON按钮后创建并显示第二个窗体,在第二个窗体中也通过一按钮来创建并显示第三个窗体,问题是在第二个窗体(MDI父窗体)中建立第三个窗体(MDI子窗体)时,提示没有父窗体,创建第三个窗体时CREATE的AOWNER为SELF,即第二个窗体,这是为什么?如何解决?

解决方案 »

  1.   

    不是很清楚你的意思,创建新的MDICHILD窗体用以下这个就行了:
    application.CreateForm(tform6,form6);
      

  2.   

    你马上到“Project”菜单下运行“Options”命令
    然后将第二、三窗口的名称在“Auto-Create Forms”列表中
    搬移到右边的列表就没有问题了!
    =========================================================
    因为,你运行的主窗口试一般的窗口,而次窗口列表中有MDI主窗口
    这样要求系统同时生成这两个窗口试会发生冲突!
      

  3.   

    建议你在MDI主窗口中显示从属窗口时
    使用动态产生的窗口变量来显示会好点
    ==================================
    Var f:TForm;
    ...
      f:=fMDICHILD.Create(Self);
      f.Show;
    ...
      

  4.   

    不行阿,提示"Access violation at address 0044E10F in module 'Project1.exe'.Read of
    Address 00000000'.
      

  5.   

    http://expert.csdn.net/Expert/topic/2353/2353706.xml?temp=.4039881只能解决一个的情况。
      

  6.   

    TO:Dlwxn(韩飞子)
     我的情况和他的不一样,例如我做一个进销存系统,主窗体列出各个模块如基本信息管理,库存管理,进货管理等,主窗体为普通窗体,库存管理模块中主窗体为MDI父窗体,对于库存管理的一些操作则通过子窗体来操作;在主窗体中点击库存管理后,生成库存管理的MDI父窗体,同时隐藏主窗体,库存管理的操作结束后,关闭库存管理的父窗体,同时显示主窗体,再进行其他模块的操作,主窗体一直不释放,直到整个程序结束.
      

  7.   

    把MDIForm窗体设置为主窗体就行了。
      

  8.   

    Application:begin
      Application.Initialize;
      Application.CreateForm(TForm1, Form1);
      Application.Run;
    end.form1:  //form1.FormStyle: fsNormal
    implementation
      uses unit2;
    {$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
      Form2:=TForm2.Create(self);
      form2.Show;
    end;form2:  // FormStyle: fsMDIForm
    implementation
       uses unit3;
    {$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
    begin
      Form3:=TForm3.Create(Self);
      form3.Show;end;Form3:  //FormStyle: fsMDIChild
    implementation{$R *.dfm}procedure TForm3.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action:=caFree;
    end;
      

  9.   

    你把Form2和form3 的style都改成Fsnormal试试
      

  10.   

    把对Application的操作都去掉,我觉得没什么必要的