form1.hide与form1.close的区别?(50分)

  • 主题发起人 主题发起人 pepsi-cola
  • 开始时间 开始时间
P

pepsi-cola

Unregistered / Unconfirmed
GUEST, unregistred user!
form1.hide与form1.close的区别?
 
close的缺省动作是hide,不过可以在OnClose事件中给Action重新赋值,改变缺省动作,
比如Action:=caFree,这样,Close后,就会自动把窗体释放
 
close 會釋放資源,不能用Show來重新顯示,必須重新Create。
hide 只是隱藏窗體,可以用Show來顯示窗體。
 
hide只是隐藏窗体,还没有释放资源,close则关闭窗体,并释放了资源.
 
如果OnClose事件什么也不做,Close和hide一样,不会释放资源
不会释放资源!!
绝对不会释放资源!!!
 
SS2000,请问,如果在OnClose不释放资源,那么在什么时候释放呢?
我做的实验是MDI窗体中子窗体Close的时候,内存不被释放
 
我有一个苹果,吃了(CLOSE)跟藏起来(HIDE),有何区别?苹果吃了就没了,想再吃请买一个(CREATE),
苹果藏起来了,想吃我就拿出来就是了(SHOW).其当然在MDI中有点区别!
明白否?
 
procedure TMDIChildForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action:=cafree;//释放资源
end;
//MID子窗体不能HIDE,在VB中是可以的,在DELPHI中要HIDE可以用API函数ShowWindow
 
Close方法与Hide不同的是
例如: From1.Close;
1.Close方法调用的时候,就会调用对象的CloseQuery方法
如果窗口能被Close,那么CloseQuery返回true,执行Close,并且释放对象
如果返回false,那么Close方法终止执行。
如果Form1是程序的主窗口,那么相当于整个程序退出,等价于 Application.Terminate;
2.Hide方法调用的时候,它只修改对象的Visible属性
但对象仍然驻留内存
 
show跟hide相互对应
create 跟destroy对应

在close后,destory会被执行。
但是对于mdi自窗口,默认情况下,不会destroy,只是minimize,
如果把action设为cafree,就是释放了
 
据我所知,close是不会释放的。不然为什么会有action := cafree这件事。

区别到底在哪里?!!!!!!!!!!!!!!!!!!!!
 
对于普通窗体,close就释放了;
而对于mdi的子窗体,必须在close事件执行action:=cafree才能释放,否则只是hide.
 
各位,要回答别人的问题,请搞清楚
我说得很清楚了,只调用Close,不会释放资源。
释放资源有两种方法
1:调用Close,并且在OnClose中,Action:=caFree;
2:直接调用Form1.Free;
区别在于,调用Hide函数,只调用OnHide消息
调用Close函数,先调用OnCloseQuery消息,再
调用OnClose,最后调用OnHide消息
 
同意 SS2000,“只调用Close,不会释放资源。”
的确是这样的!当然,前提是你这个窗口不是主窗口(Application.MainForm)!

 
刚才翻了翻书,我原来的说法是错误的,应该是:
对于主窗体,close就是中止程序
对于二级窗体,close的默认事件是caHide
对于MDI子窗体,close的默认事件是caMinimize
 
还是学点别的吧……[?]
 
同意SS2000和pipi_lu的观点。
 
我说的确实是只针对普通窗体。
对于主窗体和MDI子窗体,pipi_lu补充的很正确
 
是否可以理解为,对于二级窗体hide等同于close呢?
 
后退
顶部