使用特定选项卡打开新表单
Opening a new form with specific tab
我希望这样的东西能起作用:
Form2.Show();
Form1.Hide();
Form2.PageControl1.ActivePage := TabSheet1;
问题是我有多个按钮(在第一个表单中),我希望每个按钮都能在 PageControl 的特定选项卡中打开新表单。
错误:Undeclared identifier: 'TabSheet1'
该消息显示未定义 TabSheet1 - 这可能是因为您在父对象之外(尽管没有向我们显示完整代码),所以您需要行
Form2.PageControl1.ActivePage := Form2.TabSheet1;
Dsm 的回答是所提问题的正确答案。
但从设计的角度来看,虽然这会很好地工作,但它确实需要调用代码了解 Form2 的内部结构,这不是很好的 class 封装。我会向 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();
我希望这样的东西能起作用:
Form2.Show();
Form1.Hide();
Form2.PageControl1.ActivePage := TabSheet1;
问题是我有多个按钮(在第一个表单中),我希望每个按钮都能在 PageControl 的特定选项卡中打开新表单。
错误:Undeclared identifier: 'TabSheet1'
该消息显示未定义 TabSheet1 - 这可能是因为您在父对象之外(尽管没有向我们显示完整代码),所以您需要行
Form2.PageControl1.ActivePage := Form2.TabSheet1;
Dsm 的回答是所提问题的正确答案。
但从设计的角度来看,虽然这会很好地工作,但它确实需要调用代码了解 Form2 的内部结构,这不是很好的 class 封装。我会向 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();