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