关于Form.close;free,destroy的问题(20分)

  • 主题发起人 主题发起人 grass1
  • 开始时间 开始时间
G

grass1

Unregistered / Unconfirmed
GUEST, unregistred user!
我用application.create(TForm2,Form2)语句,创建了Form2,
可是调用了Form2.close后,重新调用Form2.show;
刚才所创建的Form2仍然存在。
问为了节约资源,应该怎样使用close,free,destroy.
三者的关系是什么?
 
1、Action:=caFree。
2、
with TForm1.Create(Application) do
Try
ShowModal;
finally
Free;
end;
 
在FormClose里写上action := caFree;
 
动态创建窗体用form2:=Tform2.create(application);
释放action:=cafree;
 
close,只是关掉窗体
free,是释放内存资源
destroy既关窗体也释放资源
我理解的不知对不对
还请高手进一步说明
 
用free就可以,方法和楼上一样,建议不用destory,用free先找,有就自动释放。
 
如果是ShowModual 用FreeAndNil(form1); 来释放资源
Show 用 action := caFree ; form1 := nil; 来释放
 
同意楼上,show,还可以用form1.release ;form1:=nil;来释放。
最好在前面加上if form1<>nil then ...
 
是在form2的onclose里写action := caFree吗?
 
是,但是你下次打开的时候需要再次Create。所以推荐使用动态创建的方式,上面有代码。
 
不要显式调用destroy,用Free来释放资源。
-------------Help上说的。
 
xy1999
再次打开时会出错: access violation xxxxxxxxx
怎么办?
 
free是释放,它调用了destroy方法,但是事先会检查是否创建,因此应该使用FREE而不是DESTROY
close只是关闭,并没有释放,可以用show或showmodal再次显示.
要想close时自动释放,在onclose事件中加上action:= cafree;这时如果要再次调用,需要
重新create.
 
接受答案了.
 
后退
顶部