如何通过标签页的名称关闭 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,它返回一个包含控件中所有TabPages
的TabPageCollection
。
因此您可以使用Item
property 来检索具有指定名称的TabPage
。
例如,如果您想要的标签页名为“Hello!”,您可以这样写:
var tabPage = myTabControl.TabPages["Hello!"];
要从控件中删除TabPage
,请使用RemoveByKey
method:
myTabControl.TabPages.RemoveByKey("Hello!");
当然,为了使其正常工作,您需要确保已将 TabPage
s 的键设置为与它们显示的标题文本相匹配。
【讨论】:
这很快,打败我! 谢谢科迪!看看 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 上的标签页的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SelectedIndexChanged 事件之前检测 TabControl 中标签页的更改?
WPF自适应可关闭的TabControl 类似浏览器的标签页