看看你的代码就知道有问题了,Button1和Button2都Free了窗体,当然出现错误了!!!!
你的问题很简单。

解决方案 »

  1.   

    1、除了form1是自动的以外,其他窗口要动态产生。
    2、
    procedure TForm1.Button4Click(Sender: TObject);
    begin
      Application.CreateForm(TFrom2, From2);
      From2.showModal;
      From2.Free;
    end;
    end;
      

  2.   

    /////////////请看注释////////////////////////////////
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    try
    form2.show;
    finally
    form2.free;
    end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
    try
    form2.showmodal;;------//form2已经释放了!!!,不能再showmodal了;
    finally
    form2.free;
    end;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
    try
    form3.create(self);;
    form3.show;
    finally
    form3.free;
    end;
    end;procedure TForm1.Button4Click(Sender: TObject);
    begin
    try
    form3.create(self);;
    form3.showmodal;
    finally
    form3.free;
    end;
    end;end.
      

  3.   

    close啊,不要free除非是动态生成的form
      

  4.   

    用close很方便,但是事实是我在Windows2000的进程查看器里发现不用free的话,程序的占用空间会变大的。
      

  5.   

    “不要free除非是动态生成的form ”,但是是动态生成的form 好象也会报错的,怎么回事?
      

  6.   

    建议你动态创建除主窗体Form1外的其他窗体:
    如动态创建窗体Form2(注意要在project菜单下的options下将其他窗体从Auto-creat中移到右边)
    procedure TForm1.Button1Click(Sender: TObject);
    begin
     try
      Form2:=TForm2.creat(self);
      From2.showModal;
     finally
      From2.Free;
    end;
    end;
      

  7.   

    你现在的水平最好不要动态创建,
    释放是一个很麻烦的东西,你所有的窗口都是在工程文件里一次创建,
    程序中就不要再创建了,也不要free,占不了多少空间的,
    我的程序有上百个窗体,占用空间也不是很大啊
    你现在的问题肯定是你把某个窗体释放了,
    又要显示,这当然会出错
      

  8.   

    首先,你的这段代码:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    try
    form2.show;
    finally
    form2.free;
    end;
    end;不会显示窗体,因为非模态窗体不会等待响应,所以刚show,就会free.另外的问题同其他人讲的一样,form2在你打算ShowModal之前,或者你没创建Create,或者是按了Button1,把Form2 free掉了。记住一点,非模态的窗体的释放要放在该窗体的OnCloseQuery事件里响应。
      

  9.   

    非模态的窗体就是非动态窗体吧?RIGHT?
      

  10.   

    如果你的动态窗体上有动态创建的空件,你要先释放那些控件,再释放窗体。最好是close后再释放,但是有些动态创建的控件应为已经在from中注册过了具体是Create(self) 还是parent=self起的作用记不太清了,释放窗体前不用再释放控件否则窗体释放时你的控件已经释放,不能再释放,也要包错。还有你的窗体比如from2.free
    后你再用from2.show等等语句也会报错。
      

  11.   

    主要在于show, showmodal的区别.好好看相关的书
      

  12.   

    两个错误:
    1、create和free、show和close、showmodal和close必须配对使用,不能混合搭配。
    2、应该是form3 := TForm3.Create(Self);这是初学者容易犯的错误。
      

  13.   

    得到高人指点:
    用Application.createform(TForm,Form);
    Form.Showmodal;
    就可以了。
      

  14.   

    请注意
    动态的form还要写
    form1.free;
    form1:=nil;
    除非form1.onclose中 设置了 action = caFree
      

  15.   

    那么:请问Form1:=nil;是什么意思,有什么作用?
      

  16.   

    to qiandeng(千灯) 
    能否解释一下?