试试这样创建窗体:
在form1中:
form2:=Tform2.create(self);在form2中:
form3:=Tform3.create(self);在form2中调用form1的控件可以这样:
Tfrom1(owner).edit1.text:='OK'!在form3中调用form2的控件可以这样:
Tfrom2(owner).edit1.text:='OK'!

解决方案 »

  1.   

    在 Form2 的构造函数中直接 ShowModal() Form3 时,实际上 Form2 本身的内部组件还没有初始化 -------- 可以从单步调试中看出。
    所以, Form2 的 Caption 是可用的,因为 CreateWindow(Ex) 已经被执行。
    但其他的(子)控件却是不可用的。在 Form2.OnShow() 中处理 Form3 的 ShowModal() 就可以了。
      

  2.   

    引用的时候掌握一个原则:
    对于要引用的单元中的全局变量, 有可能有写操作(赋值)的, 方在interface中的uses
    对于要引用的单元中的全局变量, 没有写操作的, 方在implementation中的uses对于对象, 只要针对对象变量本身没有写操作的, 也应该放在implementation中.
    比如:unit a;type ta=class(tobject)
         public
           i:integer;
         end;var aa:ta;那么对于 aa.i:=10;之类的, 就只要在implementation的uses中声明一下a就可以了
    而对:
      aa:=ta.create; 或者:var b:ta;
        b:=ta.create;
        b.i:=10;
        aa:=b;
    之类的, 就要放在interface中声明了.其实interface个implementation中的uses有点象函数的变量声明, var=interface uses,
    可以带回返回值, 而implementation uses就只能引用了.
      

  3.   

    窗体的创建顺序是A创建完后,通过某按钮事件创建B,B创建后,通过B中的某按钮事件创建C