有个问题,请当家帮忙,谢谢  在窗体Form1上放置PageControl控件,Form2上有edit1等控件。在Form1->PageControl上创建10个TTabSheet,每个TabSheet上再创建Form2.代码如下:
    For ii:=1 to 10 do
    begin
      Tab :=TTabSheet.Create(PageControl1);
      Tab.PageControl :=PageControl1;
      Tab.Caption     :='操作'+inttostr(ii)
      Form2 :=TForm2.Create(self);
      Windows.SetParent(Form2.Handle,tab.Handle);
      Form2.Show;
    end;  我可以在各自的TabSheet上进行编辑,处理等。
  我的问题是:我如何在Form1上得到每个TabSheet上的Form2的控件内容及各自的变量哩?谢谢。(因为Form2上内容太多,做全局变量太麻烦,而且还有数据库组件等。)

解决方案 »

  1.   

    不要使用一个名字(Form2)来命名各个窗体,参考下面代码:
    var
      Form1: TForm1;implementationuses unit2;
    var TabSheetForm:array [1..10] of TForm2;//以数组下标来甄别每个窗体
        Tab:TTabSheet;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var ii:integer;
    begin
      For ii:=1 to 10 do  begin
        Tab :=TTabSheet.Create(PageControl1);
        Tab.PageControl :=PageControl1;
        Tab.Caption :='操作'+inttostr(ii);
        TabSheetForm[ii]:=TForm2.Create(self);
        Windows.SetParent(TabSheetForm[ii].Handle,tab.Handle);
        TabSheetForm[ii].Show;
      end;
    end;
      

  2.   

    要访问每个窗体的成员,可以类似这样:TabSheetForm[2].Edit1.Text:='测试';但是,楼主必须明确一点,各个窗体是共享unit2的“单元全局变量”!!!如果不是共用的需要,就必须把全局变量定义为窗体变量,而不能定义为单元变量,否则,单元变量会因不同窗体的运行状态而被改变为不可预料的后果(一个实例改变了它,其它的窗体得到的值是相同的)!假如你对单元变量与窗体变量的区别(得罪了,请谅。),请看unit2的示例:......
      public
        { Public declarations }
        test3:bool;//窗体变量,每个TForm2窗体实例独自享有
      end;var
      Form2: TForm2;
      test1:bool;//单元变量,每个TForm2窗体实例均共享implementationvar test2:bool;//单元变量,每个TForm2窗体实例均共享{$R *.dfm}
    ......
      

  3.   

    上面打漏字了,更正下:示例中的test1、test2均系单元变量,test3是窗体变量(它的前面不需 var 作说明)。
      

  4.   

    gzzai辛苦了,谢谢。
    1:你的方法我还没试,我自动创建的tab,可能数量由用户来创建,是可变的数组。
    2:我说的变量是每个Form2内的变量,要通过Form1给Form2传递不同的变量。
    你的方法我觉得可以试下,谢谢。
      

  5.   


    var
      Form1: TForm1;implementationuses unit2;
    var TabSheetForm:array of TForm2;//不要定死了长度{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    var ii:integer;
    begin
      For ii:=1 to 10 do  begin
        Tab :=TTabSheet.Create(PageControl1);
        Tab.PageControl :=PageControl1;
        Tab.Caption :='操作'+inttostr(ii);
        setlength(TabSheetForm,length(TabSheetForm)+1);
        TabSheetForm[ii]:=TForm2.Create(self);
        Windows.SetParent(TabSheetForm[ii].Handle,tab.Handle);
        TabSheetForm[ii].Show;
      end;
    end;这样变通后,就可以不管客户要动态生成多少了。