Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0057: TabPages dynamisch hinzufügen/entfernen

 von 

Beschreibung

Dieser Tipp zeigt, wie man zur Laufzeit Tabs zu einem TabControl hinzufügen und diese auch wieder entfernen kann.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [11,41 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2008
' Option Strict:    An
' Option Explicit:  An
' Option Infer:     An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Deployment
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'  - System.Core
'  - System.Xml.Linq
'  - System.Data.DataSetExtensions
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Collections.Generic
'  - System.Data
'  - System.Drawing
'  - System.Diagnostics
'  - System.Windows.Forms
'  - System.Linq
'  - System.Xml.Linq
'

' ##############################################################################
' ################################ MainForm.vb #################################
' ##############################################################################
Public Class MainForm
    ' Liste aller TabPages
    Private tabPages As New List(Of TabPage)()

    ' Wenn Form lädt
    Private Sub Form_Load(ByVal sender As Object, _
        ByVal e As EventArgs) Handles MyBase.Load

        ' ListBox leeren
        Me.TabsCheckedListBox.Items.Clear()
    End Sub

    ' Wenn Hinzufügen-Butten gedrückt
    Private Sub AddButton_Click(ByVal sender As Object, ByVal e As EventArgs)
        ' Fortlaufende Nummer
        Static number As Integer = 1

        ' Neue TabPage hinzufügen
        Me.tabPages.Add(New TabPage(number.ToString()))
        ' TabPage zu ListBox hinzufügen
        Me.TabsCheckedListBox.Items.Add(number.ToString())

        number += 1
    End Sub

    ' Wenn der Entfernen-Button gedrückt wurde
    Private Sub RemoveButton_Click(ByVal sender As Object, ByVal e As EventArgs)
        ' Wenn ein Tab in ListBox ausgewählt
        If Me.TabsCheckedListBox.SelectedItem IsNot Nothing Then
            Dim index As Integer = Me.TabsCheckedListBox.SelectedIndex

            ' Wenn die TabPage momentan angezeigt wird
            If Me.TabControl.TabPages.Contains(Me.tabPages(index)) Then
                ' TabPage aus TabControl löschen
                Me.TabControl.TabPages.RemoveAt( _
                    Me.TabControl.TabPages.IndexOf(Me.tabPages(index)))
            End If

            ' Tab aus Liste entfernen
            Me.tabPages.RemoveAt(Me.TabsCheckedListBox.SelectedIndex)
            ' Tab aus ListBox entfernen
            Me.TabsCheckedListBox.Items.RemoveAt( _
                Me.TabsCheckedListBox.SelectedIndex)

            ' Wenn an Stelle des entfernten Elementes ein anderes Element 
            ' gerückt ist
            If Me.TabsCheckedListBox.Items.Count > index Then
                ' Element markieren
                Me.TabsCheckedListBox.SelectedIndex = index
            Else
                ' Letztes Element markieren
                Me.TabsCheckedListBox.SelectedIndex = _
                    Me.TabsCheckedListBox.Items.Count - 1
            End If
        End If
    End Sub

    ' Wenn TabPage in ListBox aktiviert/deaktiviert
    Private Sub TabsCheckedListBox_ItemCheck(ByVal sender As Object, _
        ByVal e As ItemCheckEventArgs) Handles TabsCheckedListBox.ItemCheck

        ' Wenn TabPage aktiviert wurde
        If e.NewValue = CheckState.Checked Then
            ' Ausgewählte TabPage zu TabControl hinzufügen
            Me.TabControl.TabPages.Add( _
                Me.tabPages(Me.TabsCheckedListBox.SelectedIndex))

        ' Wenn TabPage deaktiviert wurde
        Else
            ' Ausgewählte TabPage entfernen
            Me.TabControl.TabPages.Remove( _
                Me.tabPages(Me.TabsCheckedListBox.SelectedIndex))
            ' Wichtig: Der Index aus der ListBox darf nicht direkt beim 
            ' TabControl verwendet werden, da die Anzahl der dort angezeigten 
            ' Tabs ja anders sein kann
        End If
    End Sub

End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.