如何通过标签页的名称关闭 tabcontrol 上的标签页

Posted

技术标签:

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

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

【问题讨论】:

【参考方案1】:

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

因此您可以使用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。

以上是关于如何通过标签页的名称关闭 tabcontrol 上的标签页的主要内容,如果未能解决你的问题,请参考以下文章

如何在tabcontrol中使标签页无法访问

如何在 SelectedIndexChanged 事件之前检测 TabControl 中标签页的更改?

如何从标签页的嵌入表单中检索文本框?

WPF自适应可关闭的TabControl 类似浏览器的标签页

WPF自适应可关闭的TabControl 类似浏览器的标签页(转)

C#:按名称添加 TabControl 选项卡