现在有一主窗体,窗体上有菜单,现在在窗体上放一PageControl控件.
点击菜单之后,生成新窗体,可用TabSheet控制.
即TabSheet在主窗提下部.有多个Tab,代表不同的窗体.
我需要知道,如何将新产生的窗体,与TabSheet上的Tab关联起来.
谢谢!

解决方案 »

  1.   

    窗体创建时设置它的Tag属性为TabSheet的TabIndex
      

  2.   

    http://expert.csdn.net/Expert/topic/2508/2508034.xml?temp=.4569818
    改了一下,效果不好,具体原因如下;
      if TabSheet1.DockClientCount > 0 then
        for i := 0 to TabSheet1.DockClientCount - 1 do
        begin
          (TabSheet1.DockClients[i] as TForm).Close;
          TabSheet1.DockClients[i].Free;
        end;
      //打开Form
      try
        Application.CreateForm(TForm2, Form2);
        Form2.Dock(TabSheet1, BoundsRect);
    //第二个参数我现在还没有搞清楚是怎么回事,身成的Form不在TabSheet1的中间,而且不知道为什么TabSheet1没有DockSite属性,上面的帖子中是通过设置Panel1的DockSite属性达到满意效果的,楼主如果解决了这个问题,麻烦告诉一声,给我个短消息
        Form2.Show;
      except
        Form2.Free;
      end;
      

  3.   

    楼上用的很好,只不过,只有当Form2的position属性设为Default时Form2就可在Tabsheet的中间。
      

  4.   

    现在改好了,下面的代码实现的功能:Form1中的PageControl1上如果没有Form2对应的TTabSheet就生成一个Caption为Form2的TTabSheet。
    ////////////////////////////////////////////////////
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
    begin
      //如果已经存在就退出
      for i := 0 to PageControl1.ControlCount - 1 do
        if (PageControl1.Controls[i] as TTabSheet).Caption = 'Form2' then
          Exit;
      //打开Form
      try
        Application.CreateForm(TForm2, Form2);
        Form2.ManualDock(PageControl1, nil, alClient);
        Form2.Show;
      except
        Form2.Free;
      end;
    end;
    /////////////////////////////////////////////////////
    在Form1中添加PageControl1: TPageControl;Button1: TButton;两个控件,New一个Form2,在Unit1中Uses Unit2,然后运行即可看到效果,不需要设置任何属性。
      

  5.   

    再改一下:
    ///////////////////////////////////////////////////////////
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i: integer;
    begin
      //如果已经存在就退出
      for i := 0 to PageControl1.PageCount - 1 do
        if PageControl1.Pages[i].Caption = 'Form2' then//这里直接用Page
          Exit;
      //打开Form
      try
        Application.CreateForm(TForm2, Form2);
        Form2.ManualDock(PageControl1, nil, alClient);
        Form2.Show;
      except
        Form2.Free;
      end;
    end;
      

  6.   

    if PageControl1.Pages[i].Caption = 'Form2' then//这里直接用Page
    //////////////////////////////////////////////////////改为
    if PageControl1.Pages[i].Caption = Form2.Caption then
      

  7.   

    有如下代码,可以帮忙看一下吗?
    frmSearch := TfrmSearch.Create(Application);
    AddPage(frmSearch);
    procedure TfrmMain.AddPage(Child: TForm);
    var
      TabSheet: TdxTabSheet;
      ChildData: TChildData;
    begin
      Child.WindowState:=wsMaximized;
      ChildData:=TChildData.Create;
      ChildData.Form:=Child;
      ChildData.OnActivateEvent:=Child.OnActivate;
      ChildData.OnDestroyEvent:=Child.OnDestroy;
      ChildList.Add(ChildData);
      Child.OnActivate:=OnChildActivate;
      Child.OnDestroy:=OnChildDestroy;
      TabSheet:=TdxTabSheet.Create(Self);
      TabSheet.PageControl:=Pages;
      TabSheet.Caption:=Child.Caption;
      Pages.ActivePage:=TabSheet;
    end;
    谢谢!
      

  8.   

    你用的TdxTreeView控件?试试下面的吧:
      ...
      TabSheet:=TdxTabSheet.Create(Self);
      TabSheet.PageControl:=Pages;
      TabSheet.Caption:=Child.Caption;
      Child.Position := poDefault;
      Child.Dock(TabSheet, BoundsRect);
      Pages.ActivePage:=TabSheet;
      

  9.   

    说错了,是TdxPageControl控件吧?猜的
      

  10.   

    dulei115()你说的是对的.就是TdxPageControl控件,但还是不行.郁闷. 
      

  11.   

    请问在哪可以找到象TdxPageControl这些控件用法的实例.有谁知道请告诉一下,谢谢!
    如果方便请发送邮件:[email protected].