Delphi - 已在页面控件中打开选项卡
Delphi - Already opened tab in pagecontrol
这是关于带有动态选项卡的 PageControl。我有 5 个按钮(Button1、Button2、Button3、Button4、Button5)。
我想要以下:
- 每次单击按钮都会打开一个新的
TtabSheet
。
- 当点击同一个按钮时,'Ttabsheet' 已经打开,应该再次显示。
如何操作?
只需在您的表单 class 中定义像 fPreviousTabIndex
这样的变量,您可以在其中存储最后一个状态(ActivePageIndex
属性 的 TPageControl)。
接下来的部分已经很简单了...
procedure TForm1.Button2Click(Sender: TObject);
const
DESIRED_PAGE_INDEX = 2;
begin
if PageControl.ActivePageIndex = DESIRED_PAGE_INDEX then
PageControl.ActivePageIndex := fPreviousTabIndex
else
begin
fPreviousPageIndex := PageControl.ActivePageIndex;
PageControl.ActivePageIndex := DESIRED_PAGE_INDEX;
end;
end;
当然你需要在创建表单的过程中初始化fPreviousTabIndex
。
我不知道你为什么真的想要五个按钮来完成创建选项卡然后选择它们的工作,但这是你可以尝试的方法之一
uses System.Generics.Collections;
...
var
Newtabsheet: Ttabsheet;
Tabs: TList<Ttabsheet>;
Index: array[1..5] of Integer;
Ex: array [1..5] of Boolean;
implementation
把它放在 Formcreate
处理程序上
procedure TForm6.FormCreate(Sender: TObject);
begin
Tabs := Tlist<Ttabsheet>.create;
for I=1 to 5 do ex[I]:=false;
end;
并且每个 OnClickButton
事件处理程序都是如此
procedure TForm6.Button1Click(Sender: TObject);
begin
if not(Ex[1])then
begin
Newtabsheet := Ttabsheet.Create(PageControl1);
NewTabSheet.PageControl := PageControl1;
Newtabsheet.Caption := 'Tab 1';
Index[1] := Tabs.Count;
Tabs.Add(Newtabsheet);
Ex[1] := true;
end
else
begin
Pagecontrol1.ActivePage := Tabs.List[Index[1]];
end;
end;
procedure TForm6.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Tabs.Free;
end;
记得更改号码。
在 RAD studio Seattle 测试。
注意: 根据大卫的评论,我编辑了我的答案。如需进一步说明,请参阅此
这是关于带有动态选项卡的 PageControl。我有 5 个按钮(Button1、Button2、Button3、Button4、Button5)。
我想要以下:
- 每次单击按钮都会打开一个新的
TtabSheet
。 - 当点击同一个按钮时,'Ttabsheet' 已经打开,应该再次显示。
如何操作?
只需在您的表单 class 中定义像 fPreviousTabIndex
这样的变量,您可以在其中存储最后一个状态(ActivePageIndex
属性 的 TPageControl)。
接下来的部分已经很简单了...
procedure TForm1.Button2Click(Sender: TObject);
const
DESIRED_PAGE_INDEX = 2;
begin
if PageControl.ActivePageIndex = DESIRED_PAGE_INDEX then
PageControl.ActivePageIndex := fPreviousTabIndex
else
begin
fPreviousPageIndex := PageControl.ActivePageIndex;
PageControl.ActivePageIndex := DESIRED_PAGE_INDEX;
end;
end;
当然你需要在创建表单的过程中初始化fPreviousTabIndex
。
我不知道你为什么真的想要五个按钮来完成创建选项卡然后选择它们的工作,但这是你可以尝试的方法之一
uses System.Generics.Collections;
...
var
Newtabsheet: Ttabsheet;
Tabs: TList<Ttabsheet>;
Index: array[1..5] of Integer;
Ex: array [1..5] of Boolean;
implementation
把它放在 Formcreate
处理程序上
procedure TForm6.FormCreate(Sender: TObject);
begin
Tabs := Tlist<Ttabsheet>.create;
for I=1 to 5 do ex[I]:=false;
end;
并且每个 OnClickButton
事件处理程序都是如此
procedure TForm6.Button1Click(Sender: TObject);
begin
if not(Ex[1])then
begin
Newtabsheet := Ttabsheet.Create(PageControl1);
NewTabSheet.PageControl := PageControl1;
Newtabsheet.Caption := 'Tab 1';
Index[1] := Tabs.Count;
Tabs.Add(Newtabsheet);
Ex[1] := true;
end
else
begin
Pagecontrol1.ActivePage := Tabs.List[Index[1]];
end;
end;
procedure TForm6.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Tabs.Free;
end;
记得更改号码。
在 RAD studio Seattle 测试。
注意: 根据大卫的评论,我编辑了我的答案。如需进一步说明,请参阅此