一个MDI程序,从菜单中调用其它的子窗休。
  if Not Assigned(Form1) Then
     Form1 := TForm1.Create(Self);
  Form1.Show;
第一次调用没有问题,但关闭该窗体后再次调用,则出现什么地址错误,好像是被重复创建,请问各位,如果在MDI窗休中创建一个子窗体后,如果再次创建,则显示上次创建窗休否则创建。如何写代码。小弟是DELPHI菜鸟,各位大虾帮忙。

解决方案 »

  1.   

    MDI子窗体就不要用全局变量了

    {var
      Form1: TForm1;}
    注掉
    procedure TMainForm.Button3Click(Sender: TObject);
    var
      ChildForm: TForm1;
    begin
      ChildForm := TForm1.Create(Application);
      ChildForm.Show;
    end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;
      

  2.   

    不用form1.free,用freeandnil(form1)
      

  3.   

    DWGZ():
      但是我的想法是这样的,如果该窗休创建过以后,下次要创建就只将上次创建的窗休显示到前端,而不是再创建一个窗体。
    firetoucher(风焱) :
      为什么
      procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
      begin
        FreeAndNil(Form1);
      end;
      窗体并没有关闭,只是缩小到了主窗体的下面。
      

  4.   

    在FormClose的里面写上
    Form1:=nil;
      

  5.   

    procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      Action := caFree;
    end;
    form1为mdi子窗体
      

  6.   

    问题已解决,多谢firetoucher(风焱) ( ),给分。