2011-10-31 246 views
3

我想让我的tabControl更聪明一些,以节省一些屏幕空间:如果只有一个选项卡并且显示选项卡标题(如果有两个或多个选项卡),请不要显示选项卡标题。WinForm TabControl:如何动态地隐藏/显示选项卡标题?

我知道你可以按照How do I create a TabControl with no tab headers?的建议完全隐藏标题页眉。这种方法的问题在于,一旦隐藏,我无法再显示标题标题。或者我错过了什么?

回答

5

计入的家伙,居然came up with the idea

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 

public class WizardPages : TabControl { 
    private bool tabsVisible; 

    [DefaultValue(false)] 
    public bool TabsVisible { 
     get { return tabsVisible; } 
     set { 
      if (tabsVisible == value) return; 
      tabsVisible = value; 
      RecreateHandle(); 
     } 
    } 

    protected override void WndProc(ref Message m) { 
     // Hide tabs by trapping the TCM_ADJUSTRECT message 
     if (m.Msg == 0x1328) { 
      if (!tabsVisible && !DesignMode) { 
       m.Result = (IntPtr)1; 
       return; 
      } 
     } 
     base.WndProc(ref m); 
    } 
} 
+0

这是个好主意。非常感谢你! – newman

1

要在汉斯的答案扩大:

我想有TabControl的能够隐藏在设计时的标签太多,但随后出现了一个问题,一旦你隐藏标签,没有办法选择TabControl来重新打开它们,所以我创建了一个自定义的TabPage,它可以控制这个属性。

Imports System.Windows.Forms 

Public Class NoHeaderTabPage 
Inherits TabPage 

Public Property ShowTabs() As Boolean 
    Get 
     Return CType(Me.Parent, NoHeaderTabControl).ShowTabs 
    End Get 
    Set(ByVal value As Boolean) 
     CType(Me.Parent, NoHeaderTabControl).ShowTabs = value 
    End Set 
End Property 

End Class 
2

坟墓挖了一下,但我知道另一种解决方案。我不知道它是从哪里来的,但在这里它是:

在形式负载:(VB.NET)

Tabcontrol1.Region = New Region (New RectangleF(TabPage1.Left, TabPage1.Top, TabPage1.Width, TabPage1.Height)) 

哪里TabControl1是你的标签控制和TabPage1的名头名该控件中的标签页。

如果你想让它可作为一种常规的,那么你可以做这样的事情:

Public Sub hideTabs(ByVal TC as TabControl) 
    TC.Region = New Region(New RectangleF(TC.TabPages(0).Left,TC.TabPages(0).Top, TC.TabPages(0).Width, TC.TabPages(0).Height)) 
End Sub 

它是那么容易。这样做的好处在于,头文件在运行时不显示,但在设计时可见。

相关问题