Delphi - 已在pagecontrol中打开选项卡

时间:2017-05-03 12:54:42

标签: delphi delphi-xe

这是关于带动态标签的PageControl。我有5个按钮(Button1,Button2,Button3,Button4,Button5)。

我想要以下内容:

  1. 每次点击按钮都会打开一个新的TtabSheet
  2. 点击相同的按钮时,“Ttabsheet'已经打开,应该再次显示。
  3. 怎么做?

2 个答案:

答案 0 :(得分:0)

只需在表单类中定义类似fPreviousTabIndex的变量,您可以在其中存储TPageControl的最后一个状态(ActivePageIndex属性)。

下一部分已经很简单......

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

答案 1 :(得分:-1)

我不知道为什么你真的想让五个按钮完成创建标签然后选择它们的工作,但这是你可以尝试的方法之一

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测试。

注意:根据david评论我编辑了我的答案。有关详细说明,请参阅此question