Вопрос по winforms, tabcontrol –  если вы хотите указать позицию.

12

ужен какой-то способ скрыть заголовки TabControl (я буду переключать выбранную вкладку программно). Как я могу это сделать?

Ваш Ответ

4   ответа
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

чтобы он скрывал заголовки. Проще всего сделать это в коде (или создать собственный элемент управления, который делает это):

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 и будет отображаться только область tabpage.

Я хотел бы добавить это как пользовательский контроль и добавить свойства, чтобы Скрыть / показать заголовок. Тогда его легко работать с элементом управления во время разработки, а затем скрыть время выполнения заголовков. Stefan
Добавлен код для предотвращения навигации с помощью клавиатуры, если tabcontrol получил фокус, он перенаправляет фокус на активную вкладку. Stefan
Вам также нужно будет обрабатывать случаи, чтобы предотвратить перемещение по клавиатуре между вкладками. walkingTarget
0

Удалить или добавить TabPage

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

Альтернативное использованиеTabPages.Insert(index, tabPage) если вы хотите указать позицию.

33

о несколько проще, чем у Стефана.

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

Хотя высота устанавливается в 1 пиксель, заголовки фактически исчезаютполностью когда вы также используетеTabSizeMode.Fixed.

Это хорошо сработало для меня.

Этот простой подход хорошо работает. Если вы заметили нежелательные границы на верхнем, правом и нижнем краях, просто переключитесь с TabAppearance.Normal на TabAppearance.FlatButtons должно позаботиться об этом: "tabControl.Appearance = TabAppearance.FlatButtons;" John Lewin
Если вы сделаете это во время разработки, tab и alt-tab позволят вам переключаться между страницами без использования вкладок. majjam
Ответ и совет работал отлично! fedeteka

Похожие вопросы