2017-05-03 66 views
0

这是关于带动态选项卡的PageControl。我有5个按钮(Button1,Button2,Button3,Button4,Button5)。德尔福 - 已在页面控制中打开标签

我想以下几点:

  1. 每点击一个按钮,将打开一个新的TtabSheet
  2. 当点击同一个按钮时,'Ttabsheet'已经打开,应该再次显示。

如何做到这一点?

+0

所以当你点击一个按钮,你想要显示的页面? –

+0

,你能解释第二部分吗? –

+0

欢迎来到Stack Overflow!请[编辑]您的问题以显示[迄今为止的代码](http://whathaveyoutried.com)。你至少应该包括一个你遇到问题的代码大纲(但最好是[mcve]),然后我们可以尝试帮助解决具体问题。你还应该阅读[问]。 –

回答

-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上进行测试。

注:根据大卫评论我编辑了我的答案。并进一步解释请看这question

+0

是的它可以很好地运行,但是当我删除标签时它不能重新打开相同的标签。我该怎么办? –

+0

当您删除选项卡时,执行'ex(选项卡的编号):= false;'它应该做的伎俩。 –

+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

+0

问题是,创建标签的相同按钮应该在再次单击时选择它。 –