急求防止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;