请问怎样在父窗体中怎样检测其中一个子窗体(不可见)是否已经create了?能给个实例吗?谢谢了。

解决方案 »

  1.   

    if Assigned(ChildForm) then 
      ShowMessage('已经创建')
      

  2.   

    if Assigned(ChildForm) then 
      ShowMessage('已经创建')childform代表要测试的窗口
      

  3.   

    Assigned()函数判断就可以了
      

  4.   

    //初始化
    initialization
         ChildForm:=nil;
    //释放时
         FreeAndNil(ChildForm);
    //检测
    if Assigned(ChildForm) then 
      ShowMessage('已经创建')
      

  5.   

    Assigned或者在那个Form的OnFormDestory事件中写
    Form := nil;
    然后就可以用if form = nil then
                begin
                  //说明没有创建
                end;
      

  6.   

    procedure TMainForm.N12Click(Sender: TObject);
    var
      aAdminUser:TAdminUsers;
    begin
      if Assigned(aAdminUser) then aAdminUser.Close
      else
      begin
          aAdminUser:=TAdminUsers.Create(self);
          aAdminUser.Show;
      end;
    end;我这样还是不对,这次是一直不能创建,难道我在var中声明aAdminUser后,aAdminUser就不为nul了?我还没有create啊。大家再帮帮忙吧。
      

  7.   

    Assigned(vForm) 和 判断vForm <> nil 效果一样!~~
    关键是在释放vForm的时候要把vForm赋值为nil ~~//这样的代码是前不久学的!~建议使用~
    if not Assigned(Application.FindComponent('MyForm')) then
      MyForm := TMyForm.Create(Application); //(Application)不能少!
      

  8.   

    MyForm := TMyForm.Create(Application); //(Application)不能少!如果缺少Application ,第一次创建不会出问题(或者是没表现出来),再次创建的时候就会出错。
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      aAdminUser: TAdminUsers;
    begin
      aAdminUser := TForm(FindComponent('aAdminUser'));
      if Assigned(aAdminUser) then begin
        aAdminUser.Close;
        aAdminUser.Free;
      end else begin
        aAdminUser := TAdminUsers.Create(Self);
        aAdminUser.Name := 'aAdminUser';
        aAdminUser.Show;
      end;
    end;
      

  10.   

    aAdminUser:=TAdminUsers.Create(self);应该是aAdminUser:=TAdminUser.Create(self);吧
      

  11.   

    to hyhgir(yy) 
      你错了.因为有这句----
    var
      aAdminUser: TAdminUsers;
      

  12.   

    通过Assigned(Form)在我上面的代码中是检测aAdminUsers吗?
      

  13.   

    to zswang(伴水清清)(专家门诊清洁工) 我参照你的代码改了一下但还是不行,一个也建不出来。procedure TMainForm.N12Click(Sender: TObject);
    var
       aAdminUser:TAdminUsers;
    begin
       if Assigned(Application.FindComponent('aAdminUser')) then
       begin
       aAdminUser:=TAdminUsers.Create(Application);
       aAdminUser.Show;
       end
       else
       begin
            aAdminUser.Close;
            aAdminUser.Free;
       end;
    end;
      

  14.   

    to zswang(伴水清清)(专家门诊清洁工) 这次可以了,但是在关闭aAdminUser时程序报错,提示后退出了
    而且if 中 else的部分好像一直都没有执行
    procedure TMainForm.N12Click(Sender: TObject);
    var
       aAdminUser:TAdminUsers;
    begin
       if not Assigned(Application.FindComponent('AdminUsers')) then
       begin
       aAdminUser:=TAdminUsers.Create(Application);
       aAdminUser.Show;
       end
       else
       begin
            aAdminUser.Close;
       end;
    end;
      

  15.   

    我是这样子写的:
    procedure TMainForm.N33Click(Sender: TObject);
    var
      CompFrame:TFrame;
    begin
    try
      CompFrame.Free;
      CompFrame:=TFrame.Create(MainForm);
      With CompFrame do
      begin
        Parent:=Panel2;
        Visible:=true;
        Align:=alclient;
      end;
    except
    end;
    end;
      

  16.   

    procedure TMainForm.N12Click(Sender: TObject);
    var
       aAdminUser:TAdminUsers;
    begin
       aAdminUser:=Application.FindComponent('aAdminUser');
       if Assigned(aAdminUser) then
       begin
         aAdminUser:=TAdminUsers.Create(Application);
       end
       else
       begin
          aAdminUser.Close;
       end;
    end;————————————————————————————————————————————————————————————————在 TaAdminUser 的OnClose中,添加如下代吗:Action:=caFree;
    ————————————————————————————————————————————————————————————————
    调试通过