ChildForm:TChildForm;
用
ChildForm:TChildForm.Create(Application);
创建了一个MDI窗体后,用
ChildForm.Close;
在
TChildForm的OnClose中写入Action:=acfree;
在OnDestroy中写入self:=nil;
结果再次创建这个窗体的时候出现访问出错的问题。
下面是我写的再次创建子窗体的语句
if not assigned(Child) then //这句不执行
begin
Child:=TMDIChild.Create(Application);
Child.Caption:=Caption;
Child.Command:=Command;
Child.EmbeddedWB1.Go(ProgramPath+FileName);
end;
try
Child.BringToFront; //这句出错
except
on e:Exception do
Showmessage(e.Message);
end;
//用这种方式也会出错
{ if Child=nil then
begin
Child:=TMDIChild.Create(Application);
Child.Caption:=Caption;
Child.Command:=Command;
Child.EmbeddedWB1.Go(ProgramPath+FileName);
exit;
end;
if Child.EmbeddedWB1=nil then
begin
Child:=TMDIChild.Create(Application);
Child.Caption:=Caption;
Child.Command:=Command;
Child.EmbeddedWB1.Go(ProgramPath+FileName);
exit;
end; }不知道这种情况应该怎么处理
用
ChildForm:TChildForm.Create(Application);
创建了一个MDI窗体后,用
ChildForm.Close;
在
TChildForm的OnClose中写入Action:=acfree;
在OnDestroy中写入self:=nil;
结果再次创建这个窗体的时候出现访问出错的问题。
下面是我写的再次创建子窗体的语句
if not assigned(Child) then //这句不执行
begin
Child:=TMDIChild.Create(Application);
Child.Caption:=Caption;
Child.Command:=Command;
Child.EmbeddedWB1.Go(ProgramPath+FileName);
end;
try
Child.BringToFront; //这句出错
except
on e:Exception do
Showmessage(e.Message);
end;
//用这种方式也会出错
{ if Child=nil then
begin
Child:=TMDIChild.Create(Application);
Child.Caption:=Caption;
Child.Command:=Command;
Child.EmbeddedWB1.Go(ProgramPath+FileName);
exit;
end;
if Child.EmbeddedWB1=nil then
begin
Child:=TMDIChild.Create(Application);
Child.Caption:=Caption;
Child.Command:=Command;
Child.EmbeddedWB1.Go(ProgramPath+FileName);
exit;
end; }不知道这种情况应该怎么处理
Child.Command:=Command;
Child.EmbeddedWB1.Go(ProgramPath+FileName);
这两句的问题
-------------------------------------------------------
这里是没有问题的
在OnDestroy中写入self:=nil;
---------------------------------------------------------
这一句有问题了,你把self转为nil,并不是把你下面要用的child置为空了。结果再次创建这个窗体的时候出现访问出错的问题。
下面是我写的再次创建子窗体的语句
if not assigned(Child) then //这句不执行
----------------------------------------------------
此时,Child不为空,当然不执行了。-----------------------------------------------------------------
我通常解决方案如下,不是最好的,但我只会这样了。在MDIChildForm的单元中声明
ChildForm: TMDIChildForm;TMDIChildForm的OnClose中写入
Action:=caFree;
ChildForm:= nil;在主窗体中使用
if not assigned(ChildForm) then //这句的ChildForm是在子窗体中声明的那个
begin
ChildForm:=TMDIChildForm.Create(Application);
ChildForm.Caption:=Caption;
ChildForm.Command:=Command;
ChildForm.EmbeddedWB1.Go(ProgramPath+FileName);
end;
try
ChildForm.BringToFront; .......
--ChildForm和Child是不同的窗体?
Child是函数里面的参数,函数的声明是
procedure Show_Child(var Child:TMDIChild);
调用时
var
ChildForm:TChildForm;
begin
Show_Child(ChildForm)
end;
那我想将其置为空,该如何进行?
如果不为0,也不是TChildForm,那么修改成如下语句试试看:
if not (Assigned(Child) and (Child is TChildForm) then
跟踪显示为“Inaccessible value”
但assigned(Child)为True
(Child is TMDIChild)也是True
但就是Child.Show的时候出错-_-