Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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
C# 通过调用函数并向其传递字符串,添加我刚刚删除的选项卡_C#_.net_Tabcontrol - Fatal编程技术网

C# 通过调用函数并向其传递字符串,添加我刚刚删除的选项卡

C# 通过调用函数并向其传递字符串,添加我刚刚删除的选项卡,c#,.net,tabcontrol,C#,.net,Tabcontrol,我有一个选项卡控件,它有许多选项卡。我只想向用户显示3个选项卡,哪三个选项卡取决于用户使用一些单选按钮所做的选择组合。我决定在单选按钮中,当用户单击时,我将调用一个函数,该函数将传递一些数据以创建选项卡页面。下面是我认为可以工作的,但似乎我正在创建一个全新的标签,而不是在我隐藏的集合中显示一个 private void rdobtn_protocol_CheckedChanged(object sender, EventArgs e) { if (rdobtn_pro

我有一个选项卡控件,它有许多选项卡。我只想向用户显示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);
我的问题是如何通过在函数中调用并传入我要显示的“选项卡”来显示我隐藏的选项卡。希望这是有意义的。

如中所述,您不能在winforms中隐藏选项卡;您必须以您正在尝试的方式添加和删除它们。我建议您使用标签字典和一种方法,如果标签不存在,可以自动创建标签来管理所有创建的标签,这样您就不必每次都创建标签。比如:


私有无效rdobtn_协议_CheckedChanged(对象发送方,事件参数e)
{
List ListTabsShown=新列表();
//如果这些选项卡是独占的,请使用ELSE
如果(rdobtn_prot1.选中)
添加(GetTabPage(“tab_prot1”);
/*else*/if(rdobtn_prot2.选中)
添加(GetTabPage(“tab_prot2”);
/*else*/if(rdobtn_prot3.已选中)
添加(GetTabPage(“tab_prot3”);
Showtabs(ListTabsShown.ToArray());
}       
专用词典_DictTabPages=新词典();
私有选项卡页GetTabPage(字符串选项卡名)
{
选项卡页面选择选项卡页面;
if(!\u DictTabPages.TryGetValue(tabName,out SelectedTabPage))
{
SelectedTabPage=新建TabPage(tabName);
_添加(选项卡名称,SelectedTabPage);
}
返回所选选项卡页面;
}
私有void显示选项卡(参数选项卡页[]列表选项卡显示)
{
tabControl1.SuspendLayout();
tabControl1.TabPages.Clear();
//按正确顺序添加控件
tabControl1.TabPages.Add(tab_control_center);//始终是第一个选项卡
foreach(列表tabtoshow中的TabPage tp)
tabControl1.TabPages.Add(tp);
tabControl1.TabPages.Add(tab_data_center);//始终是最后一个选项卡
tabControl1.ResumeLayout();
}
希望这能回答您的问题

如winforms中所述,您不能隐藏选项卡;您必须以您正在尝试的方式添加和删除它们。我建议您使用标签字典和一种方法,如果标签不存在,可以自动创建标签来管理所有创建的标签,这样您就不必每次都创建标签。比如:


私有无效rdobtn_协议_CheckedChanged(对象发送方,事件参数e)
{
List ListTabsShown=新列表();
//如果这些选项卡是独占的,请使用ELSE
如果(rdobtn_prot1.选中)
添加(GetTabPage(“tab_prot1”);
/*else*/if(rdobtn_prot2.选中)
添加(GetTabPage(“tab_prot2”);
/*else*/if(rdobtn_prot3.已选中)
添加(GetTabPage(“tab_prot3”);
Showtabs(ListTabsShown.ToArray());
}       
专用词典_DictTabPages=新词典();
私有选项卡页GetTabPage(字符串选项卡名)
{
选项卡页面选择选项卡页面;
if(!\u DictTabPages.TryGetValue(tabName,out SelectedTabPage))
{
SelectedTabPage=新建TabPage(tabName);
_添加(选项卡名称,SelectedTabPage);
}
返回所选选项卡页面;
}
私有void显示选项卡(参数选项卡页[]列表选项卡显示)
{
tabControl1.SuspendLayout();
tabControl1.TabPages.Clear();
//按正确顺序添加控件
tabControl1.TabPages.Add(tab_control_center);//始终是第一个选项卡
foreach(列表tabtoshow中的TabPage tp)
tabControl1.TabPages.Add(tp);
tabControl1.TabPages.Add(tab_data_center);//始终是最后一个选项卡
tabControl1.ResumeLayout();
}

希望这能回答您的问题

谢谢您的回答。我必须承认,我从来没有想过要这么做。谢谢你给我展示了一些一直渴望学习的东西。我现在有两种方法做同样的事情,这是好的

我今天还玩了一些代码,并有了一个灯泡的时刻。我不是在看标签,而是在创建一个新的标签,所以我所做的只是工作,而不是做我想做的事情,我越是尝试,我就越相信这是错误的。没有什么比发现我实际上错了更重要的了,但我是人,所以现在我尝试了以下方法:

private void rdobtn_ax_protocol_CheckedChanged(object sender, EventArgs e)
{

    TabPage myTabPage = tab_ax_codenet;

    if (rdobtn_ax_ic0.Checked) myTabPage = tab_prot1;
    if (rdobtn_ax_ic5.Checked) myTabPage = tab_prot2;

    Showtab(myTabPage);
}

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

    // Add controls in correct order
    tabControl1.TabPages.Add(tab_control_centre);
    tabControl1.TabPages.Add(tab);
    tabControl1.TabPages.Add(tab_data_centre);
    

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

谢谢你的回答。我必须承认,我从来没有想过要这么做。谢谢你给我展示了一些一直渴望学习的东西。我现在有两种方法做同样的事情,这是好的

我今天还玩了一些代码,并有了一个灯泡的时刻。我不是在看标签,而是在创建一个新的标签,所以我所做的只是工作,而不是做我想做的事情,我越是尝试,我就越相信这是错误的。没有什么比发现我实际上错了更重要的了,但我是人,所以现在我尝试了以下方法:

private void rdobtn_ax_protocol_CheckedChanged(object sender, EventArgs e)
{

    TabPage myTabPage = tab_ax_codenet;

    if (rdobtn_ax_ic0.Checked) myTabPage = tab_prot1;
    if (rdobtn_ax_ic5.Checked) myTabPage = tab_prot2;

    Showtab(myTabPage);
}

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

    // Add controls in correct order
    tabControl1.TabPages.Add(tab_control_centre);
    tabControl1.TabPages.Add(tab);
    tabControl1.TabPages.Add(tab_data_centre);
    

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