WinForms Hiding TabControl Headers

后端 未结 4 1695
生来不讨喜
生来不讨喜 2020-12-06 02:16

I need some way to hide the headers of a TabControl (I\'ll be switching the selected tab programatically). How can I do this?

相关标签:
4条回答
  • 2020-12-06 02:19

    Here is the simplest solution:

    tabControl.ItemSize = new Size(0, 1);
    tabControl.SizeMode = TabSizeMode.Fixed;
    

    Although the height is being set to 1 pixel, the headers will actually disappear completely when you also use TabSizeMode.Fixed.

    This has worked well for me.

    0 讨论(0)
  • 2020-12-06 02:20

    Remove or add the TabPage

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

    Alternative use TabPages.Insert(index, tabPage) if you want to specify the position.

    0 讨论(0)
  • 2020-12-06 02:24

    Depending on your needs, you might also consider using a WinForms version of 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 讨论(0)
  • 2020-12-06 02:44

    Put the tabcontrol in a panel and fixate it so it hides the headers. Easiest is to do it in the code behind (or create a custom control that does this):

    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
    

    Now, if you resize the panel, the tabcontrol will follow and only show the tabpage-area.

    0 讨论(0)
提交回复
热议问题