2011-06-06 24 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 का पालन करेंगे और केवल tabpage-क्षेत्र को दिखाते हैं।

+1

आपको अपने टैब के बीच कीबोर्ड नेविगेशन को रोकने के लिए मामलों को संभालने की भी आवश्यकता होगी। – walkingTarget

+0

कीबोर्ड नेविगेशन को रोकने के लिए कोड जोड़ा गया है, यदि टैबcontrol को ध्यान केंद्रित किया गया है तो यह फ़ोकस को सक्रिय टैबपृष्ठ पर रीडायरेक्ट करता है। – Stefan

+0

मैं इसे उपयोगकर्ता नियंत्रण के रूप में जोड़ूंगा और शीर्षलेख छुपाएं/दिखाने के लिए गुण जोड़ूंगा। फिर डिज़ाइनटाइम में नियंत्रण के साथ काम करना आसान है, और उसके बाद हेडर रनटाइम को छुपाएं। – Stefan

29

मुझे थोड़ी देर पहले एक ही आवश्यकता थी। मेरा समाधान स्टीफन की तुलना में कुछ सरल था।

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

Athough ऊंचाई 1 पिक्सेल करने के लिए सेट किया जा रहा है, हेडर वास्तव में पूरी तरह से गायब हो जाएगा जब आप भी TabSizeMode.Fixed का उपयोग करें।

इसने मेरे लिए अच्छा काम किया है।

+9

यह सरल दृष्टिकोण अच्छी तरह से काम करता है। यदि आप ऊपर, दाएं और निचले किनारों पर अवांछित सीमाओं को देखते हैं, तो बस टैबएपियरेंस से स्विचिंग। सामान्य से TabAppearance.FlatButtons का ख्याल रखना चाहिए: "tabControl.Appearance = TabAppearance.FlatButtons;" –

+0

उत्तर और टिप ठीक काम किया! – fedeteka

+0

यदि आप इसे डिज़ाइन समय पर करते हैं, तो टैब और alt-tab आपको टैब का उपयोग किए बिना पृष्ठों के बीच स्विच करने की अनुमति देगा। – majjam

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 
0

निकालें या यदि आप स्थिति निर्दिष्ट करना चाहते हैं TabPage

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

वैकल्पिक उपयोग TabPages.Insert(index, tabPage) जोड़ें।

संबंधित मुद्दे