在窗体的CREATE事件里如何FREE掉本窗体?(50分)

  • 主题发起人 主题发起人 panjf
  • 开始时间 开始时间
在CLOSE 事件里实现FREE 掉窗体;
 
我做了个试验,不可以的 系统报告出现异常 .可以采用在窗体上添加一个按钮,在click事
件中加入 self.free 就可以运行了
 
根本不可能实现!
 
1.在CREATE事件中是不能释放自已的,任何方式都不行。
2.可以在创建后,在随后的事件中,如在SHOW事件来释放它。
3.最好的办法是在创建此窗口前,进行必要的判断来决定是否创建和SHOW它。
 
不要用Create事件,用Create构造函数

TForm1 = class(TForm)
public
constructor Create(AOwner: TComponent)
override;
end;
...

constructor TForm1.Create(AOwner: TComponent);
begin
if {can create} then inherited Create(AOwner);
end;
 
sendmessage(handle,WM_CLOSE,0,0);
能将窗体FREE掉吗?
现在有3种意见:
1。不可能实现,
2。用sendmessage(handle,WM_CLOSE,0,0);
3。正常Create,在ACTIVE或SHOW的事件里FREE;
请继续,关注!
 
直接用
release
即可
----已測試通過
 
问题讨论的似乎没意义,因为不知道这样做意义是什么?
就是说既然你还没CREATE就FREE你又为何要创建呢?
如果是为了创建是为了做某事情但窗体不显示
那完全可以把FREE放在其他事件里//这样的方法太多

 
将该FORM从AUTO_CREATE FORMS移到AVAILABLE FORMS中去,
然后在主窗体中放一按钮,写代码如:
form2:=tform2.create(application);
form2.show;
在FORM2的ONCREATE事件中写代码如:
self.release;
我在D5下测试通过.
 
to:nsj:好像不是特别妥当,不知道具体资源是否释放。
将主窗体创建代码改成以下的代码:
form2:=tform2.create(application);
form2.ShowModal;
那么程序就失去响应了。。。
 
这样做的意义:
有条件的创建窗体,符合条件时创建,不符合条件时释放?
 
TForm1 = class(TForm)
public
constructor Create(AOwner: TComponent)
override;
end;
...
constructor TForm1.Create(AOwner: TComponent);
begin
if 符合条件 then
inherited Create(AOwner)
else
Raise Exception.Create('Can not create this Form!');
end;

这是最完美的一种方法!
 
我想起來了﹐
aizb確實是最完美的方法

一下子想不起來用raise﹐ 接受答案吧

 
给了答案为什么不去试一试,
在create 事件中
postmessage(self.handle,WM_CLOSE,0,0)

 
1.Form1.Release 适用于非主form,且用show()来显示,用showmodal的话会出错;
2。aizb是个不错的办法,
3。最好的办法,适用于各种情况
 
后退
顶部