怎么样表单form1中判断form2是否已经生成了?

解决方案 »

  1.   

    MDIFORM的话可以用ChildIsOpen函数
      

  2.   

    在FORM1的PAS文件中USES FORM2
    如果FORM2不为NIL既已经存在
      

  3.   

    var
      form2:Tform2;
    begin
      if Assigned(form2) then
         showmessage('form2已经创建')
      else
         showmessage('form2没有创建');end;
      

  4.   

    if Form1<>nil then
      ...
      

  5.   

    senfore:你说的方法不行呀,我试了,返回的都是真值,不管FORM2是否建立都返回真值呀.我没有用MDIFORM,是普通的FORM.
      

  6.   

    我晕。。你的from2是不是自动创建了???
      

  7.   

    我没有自动创建,但是FORM1的FORM2都是有FRMBASE的一基类表单继承下来,不知道是不是这个原因撤.
      

  8.   

    那你是不是创建过Form2了,然后又是放掉了吧。你把释放Form2的地方改成FreeAndNil(Form2)
    应该就没问题了
      

  9.   

    没有呀,我在FORM1的按中中写了如下的代码:var form2:tform2;
    begin
      if assigned(form2) then
      form2:=tform2.create(application);
      form2.show;end;
      

  10.   

    把Var form2 : tform2去掉
    你引用Unit2,就是Form2对应的单元即可
    begin
      if assigned(form2) then
      form2:=tform2.create(application);
      form2.show;
    end;
      

  11.   

    是不是From2已经在工程文件里被创建了,
    我也是新手,希望大家指教。
    begin
      Application.Initialize;
      Application.CreateForm(TForm1, From1);
      Application.CreateForm(TForm2, From2);
      Application.Run;
    end.
      

  12.   

    Var form2 : tform2去掉我前面没有说清楚。。这行不要放在过程或者函数里。。你要声明的单元内唯一变量。。所以你应该将这一行放到implement之后。。所以过程或者函数之前。这样的话form2就在本单元内有效了。。那么你就可以使用
       Assigned(form2) 这样的函数来判断form2是否被创建了。。,你要保证你所有创建Tform2都是使用form2来创建否则如果你同单元内声明了其它名字的Tform2实例。。或者你在函数或者过程里再次声明了form2,那么Assigned(form2)就不太管用了。。那么你就需要判断窗体的本身类型了。就是你需要判断所有已经创建的窗体里到底哪些是Tform2类型而不能通过实例名称form2来判断了。