Delphi - 已在页面控件中打开选项卡

Delphi - Already opened tab in pagecontrol

这是关于带有动态选项卡的 PageControl。我有 5 个按钮(Button1、Button2、Button3、Button4、Button5)。

我想要以下:

  1. 每次单击按钮都会打开一个新的 TtabSheet
  2. 当点击同一个按钮时,'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 测试。

注意: 根据大卫的评论,我编辑了我的答案。如需进一步说明,请参阅此