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;   }不知道这种情况应该怎么处理

解决方案 »

  1.   

    self:=nil;不代表Child := nil;你可以通过Assigned(Application.FindComponent('MDIChild'))来判断是否创建
      

  2.   

    ChildForm和Child是不同的窗体?检查一下是否
    Child.Command:=Command;
    Child.EmbeddedWB1.Go(ProgramPath+FileName);
    这两句的问题
      

  3.   

    TChildForm的OnClose中写入Action:=acfree;
    -------------------------------------------------------
    这里是没有问题的
    在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;                  .......
      

  4.   

    Self:=nil的问题,要把具体的对象然置成nil
      

  5.   

    to zhuminghua() :
    --ChildForm和Child是不同的窗体?
    Child是函数里面的参数,函数的声明是
    procedure Show_Child(var Child:TMDIChild);
    调用时
    var
       ChildForm:TChildForm;
    begin
        Show_Child(ChildForm)
    end;
      

  6.   

    to zswang(伴水清清)(专家门诊清洁工) ;
    那我想将其置为空,该如何进行?
      

  7.   

    to zhuminghua() 我屏蔽掉了那两句还是出错
      

  8.   

    你跟踪一下,执行到if not assigned(Child) then 的时候,child的值是多少?是0还是乱码还是一个TChildForm.
    如果不为0,也不是TChildForm,那么修改成如下语句试试看:
    if not (Assigned(Child) and (Child is TChildForm) then
      

  9.   

    to smzgl(陈着:
    跟踪显示为“Inaccessible value”
    但assigned(Child)为True
    (Child is TMDIChild)也是True
    但就是Child.Show的时候出错-_-