2010-10-22 29 views
2

在使用VS2005的C#中,我有一个带有7个选项卡的Winforms TabControl,但是我希望最后一个选项卡仅在设置了某个配置选项时才可见。如何将TabControl选项卡设置为隐形

如何使TabControl只显示前六个选项卡?换句话说,我如何让第七个标签不可见?

+0

可能的重复:http://stackoverflow.com/questions/552579/how-to-hide-tabpage-from-tabcontrol – prostynick 2010-10-22 08:31:35

+0

可能的重复[在tabControl中隐藏和显示TabPages](http://stackoverflow.com/questions/3365025/hiding-and-showing-tabpages-in-tabcontrol) – 2010-10-22 08:41:20

回答

1
private void HideTab(object sender, EventArgs e) 
{ 
    this.tabControl1.TabPages.Remove(this.tabPage2); 
} 
private void ShowTab(object sender, EventArgs e) 
{ 
    this.tabControl1.TabPages.Add(this.tabPage2); 
} 

this.tabPage2是您的第7个页面页,无论您给它起什么名字。

+0

这不够好,被删除的页面及其控件会泄漏永久。跟踪已删除的页面,并在窗体关闭时调用Dispose()。 – 2010-10-22 08:40:23

+0

@Hans。呃,不,如果窗体关闭,不会。除非您提供其他对象的参考。 this.tabPage2被包含它的表单引用,当该表单关闭时,垃圾收集器将为你完成这项工作。 – 2010-10-22 08:50:00

+1

不,TabControl.Dispose()会自动处理页面。 Form.Dispose()迭代Controls集合。但是当页面被移除时它不能。 tabPage2引用不够好,它不包含在Controls集合中。 – 2010-10-22 08:53:46

0

不能在tabcontrol中隐藏选项卡。如果你正在添加标签和运行时间,那么如果条件不满意,不要添加第7个标签。

如果您在设计时间内完成了,如果condtion失败,请移除标签。

yourTabControl.TabPages.Remove(tabPageName); 
0

可以实现属性

public bool TabVisible 
{ 
    get 
    { 
     return tabControl1.Contains(tabPage2); 
    } 
    set 
    { 
     if(value == TabVisible) return; 
     if(value) 
      tabControl1.TabPages.Add(tabPage2); 
     else 
      tabControl1.TabPages.Remove(tabPage2); 
    } 
} 

你也应该覆盖你的配置功能,

你可以从设计师搬出Dispose函数生成的代码到你自己的代码,设计师注意到。你会发现components.Dispose();函数无法再进入tabPage进行处理,所以如果它没有被丢弃,你需要手动处理它。其他方面,尤其是如果你打开你的窗户很多次,你用尽了窗口句柄

相关问题