急求防止MDI子窗体重复打开的最佳方法! 关于try .finally.end 的用法,该如何解决
急求防止MDI子窗体重复打开的最佳方法! 关于try ...finally...end 的用法
我搜了好多帖子, 最方便的就是:
if Not assigned(frmChild) then
frmChild:=TfrmChild.create(Self);
try
frmChild.Show;
finally
frmChild.free;
frmChild:=Nil;
end;
现在的问题是:窗体一闪而过,为什么在show的时候,不等我去关闭,就直接执行finally后的语句呢?
------解决方案--------------------
这种方式要用ShowModal,不过这一般不用在MDI里。
try
frmChild.ShowModal;
finally
frmChild.free;
frmChild:=Nil;
end;
你可以用下在的方式
if Not assigned(frmChild) then
frmChild:=TfrmChild.create(Self);
frmChild.Show;
在以下两个事件中写上如下代码
procedure TfrmChild.FormDestroy(Sender: TObject);
begin
frmChild:=nil;
end;
procedure TfrmChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=CaFree;
end;
我搜了好多帖子, 最方便的就是:
if Not assigned(frmChild) then
frmChild:=TfrmChild.create(Self);
try
frmChild.Show;
finally
frmChild.free;
frmChild:=Nil;
end;
现在的问题是:窗体一闪而过,为什么在show的时候,不等我去关闭,就直接执行finally后的语句呢?
------解决方案--------------------
这种方式要用ShowModal,不过这一般不用在MDI里。
try
frmChild.ShowModal;
finally
frmChild.free;
frmChild:=Nil;
end;
你可以用下在的方式
if Not assigned(frmChild) then
frmChild:=TfrmChild.create(Self);
frmChild.Show;
在以下两个事件中写上如下代码
procedure TfrmChild.FormDestroy(Sender: TObject);
begin
frmChild:=nil;
end;
procedure TfrmChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=CaFree;
end;