简单问题----怎样安全地关闭并释放一个FORM?(20分)

J

jacer

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近遇到的问题,想请教大家:
如何关闭一个 FORM 并释放它?如果用
Form.Close;
Form.Free;
或使用
Form.Hide;
Form.Free;//I want to make sure the Form gets released
或者即使是单用:
Form.Free;
在运行时都会出现错误:'Access violation at address
XXXXXX in module'PROJECT1.EXE'. Read address FFFFFFFF'
而仅用
Form.Close;
就不会错,请问是为什么?我该怎样安全地关闭并释放一个FORM?
^^^^^^^^^^^^^^^
何种情况下有必要用 free ?
另外,FORM 的 Free,Release,Destroy 方法有什么不同?
Destroy 方法好象是 TForm 类的 destructor, 好象看到有人在
别的程序里直接调用过。
 
form.onclose中加入
Action := caFree;
可保证每次关闭自动释放Form
 
对象Form不能这么简单释放自己。会出现异常
 
zhaoyipeng说的对,在Form的OnClose事件里有一个参数Action,
如果不改变它,Normal类型的Form关闭时只是Hide,MDIChild类型的Form
关闭时只是Minimize,只有把Action:=caFree才真正把Form从内存中释放。
 
窗口的FREE过程是可以调用的,不过你应当在与窗口无关的过程中调用,

不要在窗口自己的方法里调用该函数,从你取的列子来看你是在CLOSE按钮的

ONCLINK事件函数里调用的,而该函数是窗口的一个PUBLISHED方法。

正确的做法是:可象ZHAOYIPENG所说,在ONCLOSE中设置ACTION参数。

也可在一个与窗口无关的过程中调用,如下面是一个建立窗口释放窗口的列子:

FORM:=MYFORM.CREATE(APPLICATION);
FORM.SHOWMODAL;
FROM.FREE;
 
1。为什么不用Form.Release试试?
2。你的Form是自己创建的吗?创建时Own对不对。
 
Try
//Create the form and show it
finally
form1.free;
end;
 
form.free;
form:=nil;
试试。
 
你在一个Form中自己Free自己,这可能会导致Form自身的其它过程
不能正确地释放Form。正如menxin的说法,你可以在Free后将Form
置为空,以免其它方法或函数读取无效的Form指针。
 
在当前的Form中想释放Form,应使用Form.Release.
 
在主form中调用子form建议用xuwento的方法,
在主form中可以加上action:=ca...,
 
多人接受答案了。
 

Similar threads

顶部