什么意思,调用两次Close嘛?

解决方案 »

  1.   

    tform1为mdichild
    tform2=class(tform1)
    ......
    var
      form2:tform2;
    .....
    打开:if not assigned(form2) then
             form2:=tform2.create(application);
          form2.show;   //execute only once,why?
    onclose:action:=cafree;
       
      

  2.   

    if (assigned(form2)=false) or (form2.ComponentCount=0) then
        form2:=tform2.create(application);
    form2.show;
      

  3.   

    因为你关闭(free)form2之后,form2并没有被赋为nil,而Assigned只是判断是否是nil,所以你的第二次Create不会被执行,继续Show的话就内存越界了。我不知道myxfang的方法是否能够判断出form2是否有效,但至少这不是一个好的方法。我建议去判断 MainForm.Children 中是否有form2,如没有就认为form2已经free掉了。