关于子窗口关闭与打开(100分)

T

tpeisc

Unregistered / Unconfirmed
GUEST, unregistred user!
在处理多窗口程序中的子窗口打开与显示时我会用到如下语句:
if not Assigned(Form) then
Application.CreateForm(TForm, Form);
Form.show;
窗口创建并显示以后,如果再想关闭的话,必须在窗口的OnClose事件中加:Action:=Cafree,才能达到真正关闭子窗口的效果。
但在下次调用上面的打开代码时就会出错。
关于上面的问题我是通过多加了一个变量来标识窗口的创建与否来解的,不知道是否还有别的更好的办法(我想一定会有,但我没找到,哈,,,,),请各位高手给我讲一下出错的愿因和解决的办法。
 
在窗口的OnClose事件中加:
Action:=Cafree;
Form:=nil;
 
procedure OpenForm(FormClass: TFormClass;
var fm;
Owner: TComponent);
var Child:TForm;
i:integer;
begin
for i:=0 to Screen.FormCount-1do
begin
if (Screen.Forms is FormClass) then
begin
Child:=Screen.Forms;
if not Child.Visible then
Child.Visible:=true;
if Child.WindowState=wsMinimized then
Child.WindowState:=wsNormal;
Child.BringToFront;
exit;
end;
end;
FormClass.NewInstance;
Child:=FormClass.Create(Owner);
TForm(fm):=Child;
end;

關閉的時候用Action:=caFree;
這個過程是打開窗口的,打開後就顯示,沒有創建就創建
 
if Form=nil then
Application.CreateForm(TForm, Form);
Form.show;
Form.BringToFront;
同时,在窗口的OnClose事件中加:
Action:=Cafree;
Form:=nil;
 
同意上面三位高手意见!
 
我是这样做的:
procedure TfrmLogin.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action:=CaFree;
end;

procedure TfrmLogin.FormDestroy(Sender: TObject);
begin
frmLogin := nil;
end;

Dp5开发人员指南(电子版满街都有下的!)上有专家的详解!!!
 
如果 OnClose事件中加:Action:=Cafree
那你再加一条 Form:=nil;(关键在此)
 
说得都有理
FormDestroy事件中
Form:=nil;
 
多人接受答案了。
 

Similar threads

回复
0
查看
862
不得闲
S
回复
0
查看
705
SUNSTONE的Delphi笔记
S
S
回复
0
查看
625
SUNSTONE的Delphi笔记
S
D
回复
0
查看
790
DelphiTeacher的专栏
D
D
回复
0
查看
744
DelphiTeacher的专栏
D
顶部