哦,你是不是在FORM2。FREE以后,又在FORM1中FORM2。SHOW啊?
加入一个判断:
   if assign(form2) then
form2.show
else
begin
form2:=tform2.create(self);
form2.show;
end;

解决方案 »

  1.   

    有影响的,你试试看,反正我再D6下建两个窗体,form1为主,一个按钮,事件为:form2.showmodal;另一个窗体form2,一个按钮,事件为form2.free;
    执行,按form1的按钮,弹出form2,再按form2的按钮,这时form2没有了,form1也死掉了!
      

  2.   

    更正:
    if assigned(form2) then
    form2.show
    else
    begin
    form2:=tform2.create(self);
    form2.show;
      

  3.   

    你在FORM2 FREE掉后,再SHOWMODAL它,肯定会报错,因为你引用了一个没有实例的对象
      

  4.   

    我form2.free之后,什么都没干,干不了--死掉了!
      

  5.   

    由于你是SHOWMODAL,FORM1还在等待来自FORM2的MODALRESULT时,你的FORM2就莫名其妙没有了,当然要出错了
    用SHOW就没有问题,
    或者使用SHOWMODAL时,在FORM2的ONCLOSE中写入ACTION:=CAFREE;
    也可以FREE掉FORM2。不会出问题
      

  6.   

    当然没有影响。
    不过要重新打开时,需要重新创建Form2。这样才能打开。
    最好的做法是删除Unit2中的变量form2。
    然后在打开Form2中,申明TForm2的局部变量。而不是全局变量Form2
    代码如下:
    var
      frmNew: TForm2;
    begin
      frmNew := TFrom2.Create(nil);
      try
        frmNew.ShowModal;
      finally
        frmNew.Free;
      end;
    end;
      

  7.   

    我估计你的Form2在Form1创建时已经被创建,请设置你的工程选项里的“Forms”那一栏,将Form2键入左边的列表里,可能可以解决问题
      

  8.   

    你根本就不必form2.free,form2.close是可以了。
      

  9.   

    hehe,明白了,还有个MODALRESULT,这东西干什么用啊?
      

  10.   

    MODALRESULT是FORM在被SHOWMODAL后返回的结果,比如你可以在FORM2的不同按钮事件写入MODALRESULT:=1(2,3)等等,对于FORM1来说,它就会知道你是按了确定还是取消的按钮