WinForm TabControl:如何动态隐藏/显示选项卡标题?

时间:2011-10-31 17:44:49

标签: winforms tabcontrol

我想让tabControl更智能一些,以节省一些屏幕空间:如果只有一个标签,则不显示标题页,如果有两个或更多标签,则显示标题标题。

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

3 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分: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

就这么简单。有趣的是,标题不会在运行时显示,但它们在设计时可见。

答案 2 :(得分:1)

扩展Hans的答案:

我想让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