c# - 添加一个我刚刚删除的选项卡,方法是调用函数并将其传递给字符串
问题描述
我有一个包含许多选项卡的选项卡控件。我只想向用户显示 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);
我的问题是如何通过在函数中调用它们并传入我想要显示的“选项卡”来显示我隐藏的选项卡。希望这是有道理的。
解决方案
如如何从 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();
}
希望这能回答你的问题
推荐阅读
- ssis - 如何将事务应用于文件移动任务?
- python - 链接 urls&views 后,“hello world”在 django 中不可见
- c - 无法打开音频设备 (/dev/dsp)
- amazon-web-services - aws-RunPatchBaseline 不通过 apt-get 安装新软件包
- postman - 如何使用 Postman 调用 Control-M API?
- javascript - 如何在反应原生导航中传递数据?
- c# - 存储多行存储过程数据以便稍后在 c# 中循环遍历行
- ios - tableviewcell 中的水平空间约束
- spring-boot - 扩展 Spring Data 的 SimpleJpaRepository 时无法自动装配 JpaEntityInformation
- google-schemas - Google 架构更新/删除日历中的预订(电子邮件标记)