首页 > 解决方案 > 添加一个我刚刚删除的选项卡,方法是调用函数并将其传递给字符串

问题描述

我有一个包含许多选项卡的选项卡控件。我只想向用户显示 3 个选项卡,哪三个选项卡取决于他们使用某些单选按钮做出的选择组合。我决定在用户​​单击时在单选按钮中调用一个函数,该函数将传递一些数据来创建标签页。以下是我认为可能有效的方法,但似乎我正在创建一个全新的标签,而不是在我隐藏的集合中显示一个。

   private void rdobtn_protocol_CheckedChanged(object sender, EventArgs e)
    {
       if (rdobtn_prot1.Checked) Showtab("tab_prot1");
       if (rdobtn_prot2.Checked) Showtab("tab_prot2");
       if (rdobtn_prot3 .Checked) Showtab("tab_prot3");
    }       


    private void ShowTab(string tab)
    {
            tabControl1.SuspendLayout(); //Stop it running
            tabControl1.TabPages.Clear(); // remove all the tabs

            // Add controls in correct order
            tabControl1.TabPages.Add(tab_control_centre); //always 1st tab
            
            TabPage myTabPage = new TabPage(tab); //show the correct one
            tabControl1.TabPages.Add(myTabPage);

            tabControl1.TabPages.Add(tab_data_centre); //always last tab

            tabControl1.ResumeLayout(); //Restart it running
     }

接下来我删除了这个

           TabPage myTabPage = new TabPage(tab); //show the correct one

并改变了这个

            tabControl1.TabPages.Add(tab);

仍然不行我仍然创建一个新标签。如果我直接在集合中添加名称,如下所示,它可以工作,但我无法将字符串传入。这意味着我必须对其进行硬编码,并且可能有很多选项卡。

          tabControl1.TabPages.Add(tab_prot1);

我的问题是如何通过在函数中调用它们并传入我想要显示的“选项卡”来显示我隐藏的选项卡。希望这是有道理的。

标签: c#.nettabcontrol

解决方案


如何从 TabControl 中隐藏 TabPage 中所述,您不能在 winforms 中隐藏选项卡;您必须按照您尝试的方式添加和删除它们。我只是建议使用选项卡字典和一种在不存在选项卡时自动创建选项卡的方法来管理所有创建的选项卡,这样您就不必每次都创建它们。就像是:


   
    private void rdobtn_protocol_CheckedChanged(object sender, EventArgs e)
    {
       List<TabPage> ListTabsShown = new List<TabPage>();

       //If these tabs are exclusive, use elses 
       if (rdobtn_prot1.Checked)
          ListTabsShown.Add(GetTabPage("tab_prot1"));
       /*else*/ if (rdobtn_prot2.Checked) 
          ListTabsShown.Add(GetTabPage("tab_prot2"));
       /*else*/ if (rdobtn_prot3 .Checked)
          ListTabsShown.Add(GetTabPage("tab_prot3"));

       Showtabs(ListTabsShown.ToArray());
    }       

   private Dictionary<string, TabPage> _DictTabPages = new Dictionary<string, TabPage>();

   private TabPage GetTabPage(string tabName)
   {
        TabPageSelectedTabPage;
        if(!_DictTabPages.TryGetValue(tabName, out SelectedTabPage))
        {
             SelectedTabPage = new TabPage(tabName);
             _DictTabPages.Add(tabName, SelectedTabPage);
        }

         return SelectedTabPage;
    }



    private void ShowTabs(params TabPage[] ListTabToShow)
    {
          tabControl1.SuspendLayout(); 
          tabControl1.TabPages.Clear(); 

          // Add controls in correct order
          tabControl1.TabPages.Add(tab_control_centre); //always 1st tab
            
          foreach(TabPage tp in ListTabToShow)
              tabControl1.TabPages.Add(tp);

          tabControl1.TabPages.Add(tab_data_centre); //always last tab

          tabControl1.ResumeLayout(); 
     }

希望这能回答你的问题


推荐阅读