我需要一些方法来隐藏TabControl的标题(我将以编程方式切换选定的标签)。我怎么能这样做?
答案 0 :(得分:33)
前一段时间我有同样的要求。我的解决方案比Stefan的解决方案简单一些。
tabControl.ItemSize = new Size(0, 1);
tabControl.SizeMode = TabSizeMode.Fixed;
虽然高度设置为1像素,但当您使用TabSizeMode.Fixed
时,标题实际上会完全消失 。
这对我来说效果很好。
答案 1 :(得分:3)
将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 :(得分:1)
根据您的需要,您可能还会考虑使用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
答案 3 :(得分:0)
删除或添加TabPage
void Toggle()
{
if (tabControl1.TabPages.Contains(tabPage1))
tabControl1.TabPages.Remove(tabPage1);
else
tabControl1.TabPages.Add(tabPage1);
}
如果您想指定位置,请选择使用TabPages.Insert(index, tabPage)
。