2011-06-06 6 views

答えて

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のが続くとだけタブページエリアが表示されます。

+1

また、タブ間のキーボードの移動を防ぐために、ケースを処理する必要があります。 – walkingTarget

+0

キーボードコントロールを無効にするためのコードが追加されました。タブコントロールにフォーカスがある場合、代わりにアクティブなタブページにフォーカスがリダイレクトされます。 – Stefan

+0

これをusercontrolとして追加し、ヘッダーを表示/非表示にするプロパティを追加します。それでは、デジグネームでコントロールを操作して、ヘッダランタイムを非表示にするのは簡単です。 – Stefan

29

もう少し前と同じ要件がありました。私の解決策はStefanのものよりやや簡単でした。高さAthough

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

はあなたにもTabSizeMode.Fixedを使用する際にヘッダが実際に完全を消滅する、1つのピクセルに設定されています。

これは私のためにうまくいきました。

+9

この単純なアプローチはうまくいきます。上端、右端、下端に不要な枠線がある場合は、単にTabAppearance.NormalからTabAppearance.FlatButtonsに切り替えてください。 "tabControl.Appearance = TabAppearance.FlatButtons;" –

+0

答えとヒントはうまくいった! – fedeteka

+0

デザイン時にこれを行うと、タブとalt-tabを使用して、タブを使用せずにページを切り替えることができます。 – majjam

1

必要に応じて、あなたはまた、マルチビューのリサイズ版の使用を検討してください:

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)を追加します。

関連する問題