如何动态显示两个Winforms选项卡之一?

时间:2009-03-08 10:53:25

标签: .net winforms user-interface tabcontrol

我有一个带有5个选项卡的TabControl,其中一个选项卡的内容取决于某些条件或模式 - 有时它需要显示一组控件,有时它应该显示一组完全不同的控件。 / p>

实现这一目标的最简单方法是什么?我尝试设置两个不同的选项卡,并使用tab.Enabled / Visible之类的东西 - 但在选项卡上找不到这样的属性。

我希望切换操作模式的能力 - 从显示一个选项卡,到显示另一个选项卡,再返回。请注意,我不想更改哪个选项卡活动,我想完全隐藏一个选项卡,然后显示它并隐藏另一个选项卡。

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

对于您想要执行的操作,链接的解决方案不必要地复杂。这是一个你想要的片段。它基于具有3个或更多选项卡的表单。假设在任何给定时间您需要显示选项卡2或选项卡3,但不要同时显示两者。如果表单有更多选项卡,它们将显示在选项卡2或3之后,因此您的交替选项卡将始终显示在相同的索引位置。另外,在选项卡1上还有一对名为“tab2button”和“tab3button”的单选按钮,用于切换显示哪个选项卡。单选按钮的checkchanged事件将包含此(c ++):

             if (this->tab2button->Checked)
             {
                 if(tabControl1->TabPages->Contains(tabPage3))
                 {
                     tabControl1->TabPages->Remove(tabPage3);
                 }
                 if(!tabControl1->TabPages->Contains(tabPage2))
                 {
                     tabControl1->TabPages->Insert(1,tabPage2);
                 }

             }
             else if (this->tab3button->Checked)
             {
                 if(tabControl1->TabPages->Contains(tabPage2))
                 {
                     tabControl1->TabPages->Remove(tabPage2);
                 }
                 if(!tabControl1->TabPages->Contains(tabPage3))
                 {
                     tabControl1->TabPages->Insert(1,tabPage3);
                 }
             }

答案 2 :(得分:1)

我不知道一个优雅的解决方案。对于小应用程序来说,最简单的似乎是TabPages.Add / Insert / Remove,如上所述。

在我们的大型应用程序中,我们覆盖TabControl和TabPage类 - 称之为MyTabControl和MyTabPage--并添加了我们自己的Visible属性。设置tabPage.Visible = false会导致标签页从tabControl.TabPages集合中删除。再次使页面可见会导致它将自身插入到原始索引处的选项卡控件的集合中。 Visible属性使我们的其余代码更容易管理。

但是,子类使我们的MyTabControl子类稍微难以设计。 TabControl.TabPages是一个TabPageCollection。 Visual Studio设计器想要为其创建和添加TabPages。我们需要它来保存我们的MyTabPage子类,所以我们还创建了一个MyTabPageCollection。

我们还有许多地方,根据用户的选择,选项卡上的不同控件组是可见的。我们将控件分组到不同的面板上,并显示与相应设置设置相对应的面板。

答案 3 :(得分:1)

我无法相信我没有看到适当的解决方案。我知道在过去我已经显示并隐藏了标签。

tabControl.SelectTab(索引);

宾果!没有移除,没有插入,也没有洗牌。

-Holt