当然啦,以前在form2里面写的时候如果是自动创建就会有一个全局变量
fomr2在,所以fomr2引用正常,现在你的form的名字,虽然也是fomr2
但是已经不是全局的了,在from2的单元 中引用当然不可以啦,没有这个
变量啦!
都是一个道理啦,fomr2的生存期只在你声明的这一个procedure 或者function 里面!

解决方案 »

  1.   

    再补充一句,如果你把在fomr2单元里的form2改成self就可以了,不过
    这是不必要的,因为有默认的。不过如果这一个函数不在tfom2类里面的
    话可要注意了
      

  2.   

    简单,你就把所以在fomr2单元里的fomr2都删了!
      

  3.   

    问题是后一种情况啊,我在form2里调用form3的组件,怎么办?
      

  4.   

    而且form2和form3都是手动创建,form3是:
    procedure TForm2.FormCreate(Sender: TObject);
    var
      form3:tform3;
    begin
      form3:=tform3.Create(form2);
    end;
    就是form3在form2创建的时候创建,且在form2里面要调用form3
      

  5.   

    你在我的留言里面那个tform3.create(fomr2)好象是tfomr2.create
    如果是这样的话,其实也是一样的,你就是要传入fomr2是吧?
    把create(fomr2)改成create(self);
    就可以了
      

  6.   

    不是啊,我就是想在form2的程序里调用form3的组件啊!
      

  7.   

    可是我告诉你的改法已经能完成你原来程序的功能了啊?
    你的原程序就是要把fomr2传递到fomr3的create函数中
    去吗?我叫你把它改成self就OK了,你只要在fomr3的
    创建函数中用
    var
    Form2:TForm2;
    begin
    Form2:=TForm2(AOwner);
    .
    .
    .
    end;
    这样一来就什么都不用改了,不过如果你的fomr3的单元里有其它
    函数有引用到form2的,你就要上面那个fomr2的声明放到类里面去
    不能放到这一个函数的头部了
      

  8.   

    也许是我的水平或者理解出了一点问题,我的[email protected]
    不过你还是问一问chechy它们这些2 3 个五角星的也许一下子
    就搞定了
      

  9.   

    我觉得你的Form2, Form3不要作为局部变量声明,因为每一个窗体单元不都声明一个全局变量码,直接用不就行吗
    当你把Form2, Form3作为局部变量声明时,局部变量隐藏全局变量,而你在Form2里
    编程序时用Form2变量是用的全局变量,而此时又没创建,自然出错
    Form3也一样
      

  10.   

    声明成全局变量在
    implement之前有一个
    var段,在var之后声明的就是全局变量!
      

  11.   

    还有要使用这个全局变更要uses这个单元
      

  12.   

    就是直接用阿
    因为如果你没改的话
    Form2已经被声明为全局变量了
    Form3也一样procedure TForm1.N4Click(Sender: TObject);
    begin
    form2:=tform2.Create(self);
    form2.ShowModal;
    end;
      

  13.   

    [Error] newtable.pas(35): Undeclared identifier: 'tform3'
      

  14.   

    你没有Uses TForm3所在的那个单元阿
      

  15.   

    use了啊,我现在点开use unit选项,已经没有东西可以use了
      

  16.   

    还在否
    monnet
    我在你的文件这样就行阿
    编译通过阿
    procedure TForm2.FormCreate(Sender: TObject);
    begin
      form3:=tform3.Create(self);
    end;另外我觉得你还是这样吧
    procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    //  form2.Free;
      Action := caFree;
      form3.Free;
    end;
      

  17.   

    啊???怎么就我无法通过???难道我的Delphi……