2017-05-18 53 views
-1

我希望这样的事情应该工作:打开一个新的形式与特定的标签

Form2.Show(); 
Form1.Hide(); 
Form2.PageControl1.ActivePage := TabSheet1; 

的事情是,我有多个按钮(在第一种形式),我想对于每一个他们可以在PageControl的特定选项卡中打开新窗体。

错误:Undeclared identifier: 'TabSheet1'

+1

我经常使用的各这些命令没有问题。那么你的问题到底是什么?我认为你需要给予更多的帮助,最好是一个能够显示你的问题的小型示例程序。同时请说明它是Firemonkey还是VCL,以及您使用的Delphi版本。 – Dsm

+0

其VCL。它说:'未声明的标识符''TabSheet1'' - Delphi 7 –

回答

2

的消息显示,TabSheet1没有定义 - 这可能是(虽然不向我们展示完整的代码),因为你的父对象外,所以你需要行

Form2.PageControl1.ActivePage := Form2.TabSheet1; 
1

Dsm的回答是提问的正确答案。

但是从设计的角度来看,虽然这样可以正常工作,但它确实需要调用代码来了解Form2的内部知识,这不是很好的类封装。我将一个数据成员,而不是添加到Form2,表示期望的页面在窗体的OnShow事件来显示,然后调用Show()之前设置该成员,如:

type 
    TWhichTab = (wtNone, wtTab1, wtTab2, ...); 

    TForm2 = class(TForm) 
    PageControl1: TPageControl; 
    TabSheet1: TTabSheet; 
    TabSheet2: TTabSheet; 
    ... 
    procedure FormShow(Sender: TObject); 
    ... 
    public 
    ... 
    InitialTab: TWhichTab; 
    end; 

    procedure TForm2.FormShow(Sender: TObject); 
    begin 
    PageControl1.ActivePageIndex := Ord(InitialTab)-1; 
    end; 

Form2.InitialTab := wtTab2; 
Form2.Show(); 
Form1.Hide(); 
+0

是的,我同意,虽然我会进一步讨论它,并且指出正在显示什么而不是哪个选项卡,因为信息如何显示应该是视觉对象。例如,标签可能会重新排序,例如6个月。 – Dsm