【问题标题】:how to set a TabControl tab to be invisible如何将 TabControl 选项卡设置为不可见
【发布时间】:2013-11-07 11:05:24
【问题描述】:

在使用 VS2005 的 C# 中,我有一个带有 7 个选项卡的 Winforms TabControl,但我希望最后一个选项卡只有在设置了某个配置选项时才可见。

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

【问题讨论】:

标签: c# winforms tabcontrol


【解决方案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 个标签页,不管你给它起什么名字。

【讨论】:

  • 这还不够好,被删除的页面及其控件将永久泄漏。需要跟踪已删除的页面并在表单关闭时调用 Dispose()。
  • @Hans。嗯,不,如果表格关闭,它不会。除非您引用其他一些对象。 this.tabPage2 被包含它的表单引用,当该表单关闭时,垃圾收集器将为您完成工作。
  • 否,TabControl.Dispose() 将自动处理页面。由 Form.Dispose() 迭代 Controls 集合调用。但是当页面被删除时它不能。 tabPage2 引用不够好,它没有包含在 Controls 集合中。
  • 当 TabControl 和表单被移除时,还有什么对 tabPage2 的引用?
  • 隐藏的“停车窗口”有对其的引用。导致标签页及其上的所有控件永远泄漏。垃圾收集并不能解决问题。
【解决方案2】:

不,它不可能隐藏选项卡控件中的选项卡。如果您在运行时添加选项卡,则如果条件不满足,则不要添加第 7 个选项卡。

如果您在设计时完成,则在条件失败时删除选项卡。

yourTabControl.TabPages.Remove(tabPageName);

【讨论】:

    【解决方案3】:

    你可以实现一个属性

    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进行处理了,所以如果还没有被处理就需要手动处理了。否则,特别是如果您多次打开窗口,您会用完窗口句柄

    【讨论】:

      猜你喜欢
      • 2010-12-09
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-12
      相关资源
      最近更新 更多