WinForms 隐藏 TabControl 标题

12

我需要一种方法来隐藏TabControl的标题栏(我将通过编程方式切换选定的选项卡)。该怎么做?

4个回答

43
这是最简单的解决方案:
tabControl.ItemSize = new Size(0, 1);
tabControl.SizeMode = TabSizeMode.Fixed;

尽管高度被设置为1像素,但当您同时使用TabSizeMode.Fixed时,标题实际上会完全消失。

这对我非常有效。


12
这种简单的方法效果不错。如果你注意到选项卡控件的顶部、右侧或底部出现了不必要的边框,只需将TabAppearance.Normal改为TabAppearance.FlatButtons即可解决问题:“tabControl.Appearance = TabAppearance.FlatButtons;” - John Lewin
如果您在设计时这样做,使用Tab和Alt-Tab键可以在不使用选项卡的情况下在页面之间切换。 - majjam
哈哈哈... 有点棘手,但不错.... 它在运行!太好了....! - gumuruh

3

将TabControl放在Panel中并固定它,使其隐藏标头。 最简单的方法是在代码后台完成(或创建一个自定义控件来完成此操作):

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim bordersize As Integer = 3 'could'nt find this on the control.

    Dim ControlSize As New Size(437, 303) ' the size you want for the tabcontrol
    Dim ControlLocation As New Point(10, 10) 'location

    Dim p As New Panel
    p.Size = ControlSize
    p.Location = ControlLocation
    Me.Controls.Add(p)

    Dim t As New TabControl
    t.Size = ControlSize
    p.Controls.Add(t)



    t.Left = -t.Padding.Y
    t.Top = -(t.ItemSize.Height + t.Padding.Y)
    p.Width = t.Width - t.Padding.X
    p.Height = t.Height - (t.ItemSize.Height + t.Padding.Y + bordersize)
    t.Anchor = AnchorStyles.Bottom Or AnchorStyles.Left Or AnchorStyles.Right Or AnchorStyles.Top

    AddHandler t.GotFocus, AddressOf ignoreFocus
End Sub

Private Sub ignoreFocus(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim t As TabControl = CType(sender, TabControl)
    If t.SelectedIndex > -1 Then t.TabPages(t.SelectedIndex).Focus()
End Sub

现在,如果您调整面板的大小,选项卡控件将跟随并仅显示选项卡页区域。

1
您还需要处理一些情况,以防止在选项卡之间进行键盘导航。 - walkingTarget
增加了代码以防止键盘导航,如果选项卡控件获得焦点,则将焦点重定向到活动选项卡页。 - Stefan
我会将其添加为用户控件,并添加属性以隐藏/显示标题。然后在设计时轻松使用控件,然后在运行时隐藏标题。 - Stefan

1

根据您的需求,您也可以考虑使用WinForms版本的MultiView:

Public Class MultiView
  Inherits Panel

  Public Property SelectedIndex As Integer
    Get
      Return _SelectedIndex
    End Get
    Set(Value As Integer)
      If Value.IsBetween(-1, Me.Controls.Count, InclusionOptions.Exclusive) Then
        Me.SelectView(Me.Controls(Value))
      Else
        _SelectedIndex = -1
      End If
    End Set
  End Property
  Private _SelectedIndex As Integer = -1



  Public Property SelectedView As UserControl
    Get
      Return _SelectedView
    End Get
    Set(Value As UserControl)
      If Value IsNot Nothing Then
        Me.SelectView(Value)
      End If
    End Set
  End Property
  Private _SelectedView As UserControl



  Default Public ReadOnly Property Item(Index As Integer) As UserControl
    Get
      Return Me.Views(Index)
    End Get
  End Property



  Default Public ReadOnly Property Item(Name As String) As UserControl
    Get
      Return Me.Views.Where(Function(View As UserControl)
                              Return View.Name.ToLower = Name.ToLower
                            End Function).SingleOrDefault
    End Get
  End Property



  Public ReadOnly Property Views As List(Of UserControl)
    Get
      Return Me.Controls.Cast(Of UserControl).ToList
    End Get
  End Property



  Public Sub AddView(View As UserControl)
    Me.Controls.Add(View)
    View.Dock = DockStyle.Fill
  End Sub



  Private Sub SelectView(NewView As UserControl)
    Me.Controls.Cast(Of UserControl).ToList.ForEach(Sub(OldView As UserControl)
                                                      OldView.Visible = OldView Is NewView

                                                      If OldView Is NewView Then
                                                        OldView.Visible = True
                                                        _SelectedView = OldView
                                                        _SelectedIndex = Me.Controls.IndexOf(_SelectedView)
                                                      Else
                                                        OldView.Visible = False
                                                      End If
                                                    End Sub)
  End Sub
End Class

0

移除或添加TabPage

    void Toggle()
    {
        if (tabControl1.TabPages.Contains(tabPage1))
            tabControl1.TabPages.Remove(tabPage1);
        else
            tabControl1.TabPages.Add(tabPage1);
    }

如果您想指定位置,请使用TabPages.Insert(index, tabPage)的替代方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接