我有一个带有 5 个选项卡的 TabControl,其中一个选项卡的内容取决于某些条件或模式 - 有时它需要显示一组控件,有时它应该显示一组完全不同的控件。
实现这一目标的最简单方法是什么?我尝试设置两个不同的选项卡,并使用 tab.Enabled / Visible 之类的东西 - 但在选项卡上找不到此类属性。
我想要切换操作模式的能力 - 从显示一个选项卡到显示另一个选项卡,然后再返回。请注意,我不想更改哪个选项卡处于活动状态,我想完全隐藏一个选项卡,然后显示它并隐藏另一个选项卡。
我有一个带有 5 个选项卡的 TabControl,其中一个选项卡的内容取决于某些条件或模式 - 有时它需要显示一组控件,有时它应该显示一组完全不同的控件。
实现这一目标的最简单方法是什么?我尝试设置两个不同的选项卡,并使用 tab.Enabled / Visible 之类的东西 - 但在选项卡上找不到此类属性。
我想要切换操作模式的能力 - 从显示一个选项卡到显示另一个选项卡,然后再返回。请注意,我不想更改哪个选项卡处于活动状态,我想完全隐藏一个选项卡,然后显示它并隐藏另一个选项卡。
对于您想要做的事情,链接的解决方案不必要地复杂。这是一个片段,可以满足您的需求。它基于具有 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);
}
}
我不知道一个优雅的解决方案。对于小型应用程序来说,最简单的方法似乎是 TabPages.Add/Insert/Remove,如上所述。
在我们的大型应用程序中,我们重写了 TabControl 和 TabPage 类——称它们为 MyTabControl 和 MyTabPage——并添加了我们自己的 Visible 属性。设置 tabPage.Visible = false 会导致标签页从 tabControl.TabPages 集合中移除。使页面再次可见会导致它在原始索引处将自身插入到选项卡控件的集合中。Visible 属性使我们的其余代码更易于管理。
然而,这些子类使我们的 MyTabControl 子类更难设计。TabControl.TabPages 是一个 TabPageCollection。Visual Studio 设计人员想要创建 TabPages 并将其添加到其中。我们需要它来保存我们的 MyTabPage 子类,因此我们还创建了一个 MyTabPageCollection。
我们还有很多地方可以看到选项卡上的不同控件组,具体取决于用户的选择。我们对不同面板上的控件进行分组,并显示与相应设置设置相对应的面板。
我不敢相信我还没有为这么简单的事情找到合适的解决方案。我知道过去我已经显示和隐藏了标签。
tabControl.SelectTab(索引);
答对了!没有删除,没有插入,没有洗牌。
-霍尔特