【问题标题】:How to close tab page on tabcontrol by tab page's name如何通过标签页的名称关闭 tabcontrol 上的标签页
【发布时间】:2012-03-09 07:48:33
【问题描述】:

在 c# 中,如何通过定位选项卡控件的名称来销毁选项卡控件上的选项卡?我有一个名为“你好!”的标签。我想以编程方式关闭它。不能保证它会成为当时选定的选项卡。

【问题讨论】:

    标签: c# .net winforms tabcontrol tabpage


    【解决方案1】:

    TabControl 类提供了一个TabPages property,它返回一个包含控件中所有TabPages 的TabPageCollection。

    因此您可以使用Item property 来检索具有指定名称的TabPage。

    例如,如果您想要的标签页名为“Hello!”,您可以这样写:

    var tabPage = myTabControl.TabPages["Hello!"];
    

    要从控件中删除TabPage,请使用RemoveByKey method:

    myTabControl.TabPages.RemoveByKey("Hello!");
    

    当然,为了使其正常工作,您需要确保已将 TabPages 的键设置为与它们显示的标题文本相匹配。

    【讨论】:

    • 这很快,打败我!
    • 谢谢科迪!看看 LarsTech 的回答,为了记忆,我应该将其丢弃而不是删除它吗?
    • @atw 我会两者都做,只是为了安全起见。先把它拆掉,然后再扔掉。但是您可以直接丢弃它 (reference)。
    • 我已经设置了解决方案,但遇到了挫折:'System.Windows.Forms.TabControl.TabPageCollection' 不包含 'Item' 的定义,并且没有扩展方法 'Item' 接受第一个参数可以找到类型“System.Windows.Forms.TabControl.TabPageCollection”(您是否缺少 using 指令或程序集引用?)
    • @atw 嗯,是的,Item 是 C# 中的默认属性。我的语法是错误的。我今天花了太长时间看 VB.NET 代码。
    【解决方案2】:

    你可以试试这样的:

    for (int i = tabControl1.TabPages.Count - 1; i >= 0; i--) {
      if (tabControl1.TabPages[i].Text == "Hello!")
        tabControl1.TabPages[i].Dispose();
    }
    

    我假设您指的是 TabPage 的“文本”,因为“你好!”不是控件的有效名称。

    注意:此代码将处理任何显示“Hello!”的 TabPage

    【讨论】:

    • 在标签页仍被添加到标签控件时处理标签页是个好主意吗?
    • @Blorgbeard 我认为没有任何危险。删除它并不会处理它,并且 OP 说他希望它“被摧毁”。
    • @sambomartin Dispose() 将删除它。见Hans Passant answer here。
    • 这个问题的更清晰、更明确的答案是here。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 2014-04-15
    • 2013-10-09
    相关资源
    最近更新 更多