Мне нужно каким-то образом скрыть заголовки TabControl (я буду менять выбранную вкладку программно). Как я могу это сделать?
WinForms скрывает заголовки TabControl
Ответ 1
Поместите tabcontrol в панель и зафиксируйте его, чтобы он скрывал заголовки. Самое простое сделать это в коде позади (или создать настраиваемый элемент управления, который делает это):
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
Теперь, если вы измените размер панели, tabcontrol последует и отобразит только область вкладки.
Ответ 2
У меня было такое же требование некоторое время назад. Мое решение было несколько проще, чем у Стефана.
tabControl.ItemSize = new Size(0, 1);
tabControl.SizeMode = TabSizeMode.Fixed;
Хотя высота устанавливается в 1 пиксель, заголовки фактически исчезнут полностью, когда вы также используете TabSizeMode.Fixed
.
Это хорошо сработало для меня.
Ответ 3
В зависимости от ваших потребностей вы также можете использовать версию MultiView для WinForms:
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
Ответ 4
Удалить или добавить TabPage
void Toggle()
{
if (tabControl1.TabPages.Contains(tabPage1))
tabControl1.TabPages.Remove(tabPage1);
else
tabControl1.TabPages.Add(tabPage1);
}
Альтернативное использование TabPages.Insert(index, tabPage)
, если вы хотите указать позицию.