zoukankan      html  css  js  c++  java
  • RzPageControl(pagecontrol)实现多标签的动态添加,切换,关闭

    https://blog.csdn.net/pdw2009/article/details/76157651

    使用RzPageControl来实现多标签页
    使用菜单来打开标签页,通过标签页的caption来判断将标签页是否已经被打开过了.

    1.创建标签页,并判断是否是已经打开过的页面

    procedure TFmain.Page1Click(Sender: TObject);
    var
      newpage:TRzTabSheet;
      index:integer;
    begin
      newpage:=nil;
      if not gotopage('第一页',newpage) then
        begin
          index:=findpage('第一页');
          if index=-1 then exit;
          Form1:=TForm.Create(nil);
          Form1.Parent:=Fmain.pagecontrol1.Pages[index];
          Form1.Align:=alclient;
          Form1.BorderStyle:=bsnone;
          Form1.Show;
        end;
    end;
    

      

    gotopage函数,跳转到需要显示的那页,不存在的话就创建那一页

    {
       gotopage:跳转到某页
       如果存在这页,跳转后返回true;
       如果不存在,则新建一页,返回false;
    }

    function TFmain.gotopage(scaption:string;newpage:TRzTabSheet):boolean;
    var
      i:integer;
      isExists:Boolean;
    begin
      newpage:=nil;
      isExists:=false;
      if length(scaption)<=0 then exit;
      for i:=0 to pagecontrol1.PageCount-1 do
        begin
          if pagecontrol1.Pages[i].Caption=scaption then
            begin
              pagecontrol1.ActivePage:=pagecontrol1.Pages[i];
              isExists:=true;
              break;
            end;
        end;
      if not isExists then
        begin
          newpage:=TRZTabSheet.Create(pagecontrol1);
          newpage.Caption:=scaption;
          newpage.PageControl:=pagecontrol1;
          pagecontrol1.ActivePage:=newpage;
        end;
      result:=isExists;
    end;

    findpage函数,找到指定caption的那一页,返回那页的index,如果那页不存在,返回-1

    {
      findpage:根据标题查询页,返回index
      参数为页caption
      没有找到返回-1,找到返回index
    }

    function TFmain.findpage(scaption:string):integer;
    var
      i:integer;
      isExists:boolean;
    begin
      isExists:=false;
      for i:=0 to pagecontrol1.PageCount-1 do
        begin
          if pagecontrol1.Pages[i].Caption=scaption then
            begin
              pagecontrol1.ActivePage:=pagecontrol1.Pages[i];
              isExists:=true;
              result:=i;
              break;
            end;
        end;
      if not isExists then result:=-1;
    end;

    2.双击标签,关闭标签页
    RzpageControl的双击事件,如果标题不是’首页’就关闭当前显示的这页

    procedure TFmain.PageControl1DblClick(Sender: TObject);
    begin
       if PageControl1.ActivePage.Caption<>'首页' then
      pagecontrol1.CloseActiveTab;
    end;
    

      3.通过关闭按钮关闭
    先设置ShowCloseButton属性为true
    然后重写OnClose事件

    procedure TFmain.PageControl1Close(Sender: TObject;
      var AllowClose: Boolean);
    begin //如果只剩下一页不关闭,或当前页是首页不关闭
      if (self.PageControl1.PageCount=1) or (self.PageControl1.ActivePage.Caption='首页')  then
      begin
        AllowClose:=False;
        Exit;
      end;
      AllowClose:=True;
    end;
  • 相关阅读:
    20200414:mysql原子性和持久性怎么保证
    20200417:说说redis的rdb原理。假设服务器的内存8g,redis父进程占用了6g,子进程fork父进程后,子父进程总共占用内存12g,如何解决内存不足的问题?(挖)
    [九省联考2018]秘密袭击coat
    CF1158F Density of subarrays
    忘情
    [IOI2018] meetings 会议
    [AGC013E] Placing Squares
    [八省联考2018]林克卡特树
    [NOI2016] 国王饮水记
    [十二省联考 2019]皮配
  • 原文地址:https://www.cnblogs.com/tc310/p/10857927.html
Copyright © 2011-2022 走看看