我有一个TabControl,包括5个选项卡,其中一个选项卡的内容取决于一些条件或模式。有时需要显示一组控件,其他时候则需要显示完全不同的一组控件。
怎样最容易实现这个?我尝试设置两个不同的标签页,并使用类似tab.Enabled / Visible这样的属性,但是找不到这些属性在标签页上。
我想要有切换操作模式的能力,从显示一个选项卡,到显示另一个选项卡,然后再返回。请注意,我不希望改变哪个选项卡是活动的,我想完全隐藏一个选项卡,然后显示它并隐藏另一个选项卡。
我有一个TabControl,包括5个选项卡,其中一个选项卡的内容取决于一些条件或模式。有时需要显示一组控件,其他时候则需要显示完全不同的一组控件。
怎样最容易实现这个?我尝试设置两个不同的标签页,并使用类似tab.Enabled / Visible这样的属性,但是找不到这些属性在标签页上。
我想要有切换操作模式的能力,从显示一个选项卡,到显示另一个选项卡,然后再返回。请注意,我不希望改变哪个选项卡是活动的,我想完全隐藏一个选项卡,然后显示它并隐藏另一个选项卡。
这里有一个简单的修复(破解)。
将此翻译为中文:http://www.dotnetspider.com/resources/18344-Hiding-Showing-Tabpages-Tabcontrol.aspx。 http://www.dotnetspider.com/resources/18344-Hiding-Showing-Tabpages-Tabcontrol.aspx
链接的解决方案对于你想要做的事情来说过于复杂。这里有一段代码可以实现你想要的功能。它基于一个有三个或更多标签页的表单。假设在任何给定时间,你只想要显示标签页2或标签页3,但不会同时显示。如果表单有更多的标签页,它们会在标签页2或3之后显示,因此你交替使用的标签页始终显示在相同的索引位置。还假设在第一个标签页上有一对名为“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);
}
}
我不知道一种优雅的解决方案。对于一个小应用程序来说,似乎最简单的方法是像上面建议的那样添加/插入/删除选项卡页。
在我们的大型应用程序中,我们覆盖了TabControl和TabPage类--称之为MyTabControl和MyTabPage - 并添加了我们自己的Visible属性。将tabPage.Visible = false设置会导致选项卡页面从tabControl.TabPages集合中删除自身。再次使页面可见会导致它在原始索引处将自己插入选项卡控件的集合中。Visible属性使我们的其余代码更容易管理。
然而,子类使我们的MyTabControl子类稍微变得难以设计。 TabControl.TabPages是一个TabPageCollection。 Visual Studio设计器想要创建并添加TabPages。 我们需要它来容纳我们的MyTabPage子类,因此我们还创建了一个MyTabPageCollection。
我们还有许多地方,根据用户的选择,在选项卡上会显示不同控件组。我们将控件分组到不同的面板上,并显示与适当设置相对应的面板。
我不敢相信对于一件这么简单的事情,我还没有看到一个合适的解决方案。我知道过去我已经显示和隐藏了选项卡。
TabControl.SelectTab(index); 选项卡控件。选择Tab(index);
宾果!没有移除,没有插入,没有洗牌。
霍尔特