Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi-已在pagecontrol中打开选项卡_Delphi_Delphi Xe - Fatal编程技术网

Delphi-已在pagecontrol中打开选项卡

Delphi-已在pagecontrol中打开选项卡,delphi,delphi-xe,Delphi,Delphi Xe,这是关于带有动态选项卡的页面控件。我有5个按钮(按钮1,按钮2,按钮3,按钮4,按钮5) 我想要以下内容: 每次单击按钮都将打开一个新的t表格 单击同一按钮时,应再次显示已打开的“Ttabsheet” 如何做到这一点?只需在表单类中定义变量,如fPreviousTabIndex,在其中存储最后一个状态(ActivePageIndexTPageControl属性) 下一部分已经很简单了 procedure TForm1.Button2Click(Sender: TObject); const

这是关于带有动态选项卡的页面控件。我有5个按钮(按钮1,按钮2,按钮3,按钮4,按钮5)

我想要以下内容:

  • 每次单击按钮都将打开一个新的
    t表格
  • 单击同一按钮时,应再次显示已打开的“Ttabsheet”

  • 如何做到这一点?

    只需在表单类中定义变量,如
    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
    
    在每个
    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上进行了测试


    注意:根据david的评论,我编辑了我的答案。如需进一步解释,请参见此

    ,因此当您单击按钮时,您希望显示页面?您能解释第二部分吗?欢迎使用Stack Overflow!请出示你的问题。您应该至少包括您遇到问题的代码的大纲(但最好是a),然后我们可以尝试帮助解决特定问题。您也应该阅读。我成功地在每个按钮上添加页面,但当我再次单击同一按钮时,会出现添加新页面。如果我单击显示最近打开的选项卡页面的同一个按钮,我想单击。确定,因此当您按下按钮时,将添加一个页面。当你按下同一个按钮时,你希望它显示已经添加的页面,而不是添加新页面。这就是你想要的吗?是的,它可以运行良好,但当我删除该选项卡时,它无法重新打开相同的选项卡。我应该怎么做?当您删除选项卡时,do'ex(选项卡编号):=false;'它应该可以做到。只有一件事,当你删除选项卡时,你正在从“选项卡”列表中删除它,对吗?是的,你是对的,我只是使用PageControl1.ActivePage.free来激活选项卡的语句列表。这段代码非常混乱。至少它应该使用一个数组而不是5个变量。无论如何,抛开所有代码并使用tab sheets的TabVisible属性更容易。问题是创建选项卡的同一个按钮在再次单击时应该选择它。
    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;