+ -
当前位置:首页 → 问答吧 → TTabSheet的问题!急啊

TTabSheet的问题!急啊

时间:2011-10-11

来源:互联网

有个问题,请当家帮忙,谢谢

  在窗体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上内容太多,做全局变量太麻烦,而且还有数据库组件等。)

作者: njbudong   发布时间: 2011-10-11

不要使用一个名字(Form2)来命名各个窗体,参考下面代码:
Delphi(Pascal) code
var
  Form1: TForm1;

implementation

uses 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;

作者: gzzai   发布时间: 2011-10-12

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

var
  Form2: TForm2;
  test1:bool;//单元变量,每个TForm2窗体实例均共享

implementation

var test2:bool;//单元变量,每个TForm2窗体实例均共享

{$R *.dfm}
......

作者: gzzai   发布时间: 2011-10-12