将你的TabPage强制转换为控件(Control),然后将Enabled属性设置为false。
((Control)this.tabPage).Enabled = false;
因此,选项卡页面的标题仍将启用,但其内容将被禁用。TabPage 类隐藏了 Enabled 属性。这是有意为之的,因为它存在着一些奇怪的 UI 设计问题。基本问题在于,禁用页面并不能同时禁用选项卡。如果您尝试通过在 Selecting 事件中禁用选项卡来解决该问题,则在 TabControl 只有一个页面时无法正常工作。
如果您不关心这些可用性问题,则请记住该属性仍然可以使用,只是在 IntelliSense 中被隐藏了。如果 FUD 让您感到不适,请使用以下方法:
public static void EnableTab(TabPage page, bool enable) {
foreach (Control ctl in page.Controls) ctl.Enabled = enable;
}
你可以简单地使用:
tabPage.Enabled = false;
虽然不会显示这个属性,但它可以正常运作。
您可以在 TabControler
上编写选择事件,以使其无法切换到不可编辑的选项卡:
private void tabControler_Selecting(object sender, TabControlCancelEventArgs e)
{
if (e.TabPageIndex < 0) return;
e.Cancel = !e.TabPage.Enabled;
}
Visible
属性似乎也是如此,尽管在测试时它似乎没有任何视觉效果。 - Alfie你可以注册"Selecting"事件并取消导航到选项卡页面:
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
if (e.TabPage == tabPage2)
e.Cancel = true;
}
另一个想法是将标签页中的所有控件放在一个面板控件中,然后禁用该面板!Smiley
您还可以从tabControl1.TabPages集合中删除标签页。这样会隐藏标签页。
感谢littleguru @ Channel 9提供的帮助。
假设您想在选项卡控件中看到该选项卡,但希望它处于“禁用”状态(即灰色且不可选择)。没有内置支持此功能,但您可以覆盖绘制机制以实现所需的效果。
这里提供了一个示例(链接)说明如何完成这个过程。
关键在于此源代码片段和DisableTab_DrawItem方法:
this.tabControl1.DrawMode = TabDrawMode.OwnerDrawFixed;
this.tabControl1.DrawItem += new DrawItemEventHandler( DisableTab_DrawItem );
在扩展Cédric Guillemette的回答之后,当你禁用Control
时:
((Control)this.tabPage).Enabled = false;
你可以像这样处理TabControl
的Selecting
事件:
private void tabControl_Selecting(object sender, TabControlCancelEventArgs e)
{
e.Cancel = !((Control)e.TabPage).Enabled;
}
tabControl1.Controls.Remove(tabPage2);
如果您以后需要,可能希望在删除之前将其存储在临时选项卡中,然后在需要时重新添加它。
Selecting
事件并阻止选项卡被激活。 tabPage.Parent = null;
当您想将其返回时(将在页面集合的末尾将其返回):
tabPage.Parent = tabControl;
如果您想将其返回到页面中特定的位置,则可以使用以下方法:
tabControl.TabPages.Insert(indexLocationYouWant, tabPage);
我以前处理过这个问题。我从TabPages集合中移除了Tab(我想是这样),并在条件改变时重新添加它。但那只是在Winforms中,我可以将选项卡保留到再次需要它的时候。