Skip to main content

TabControl

Ein TabControl ist ein Container, der mehrere TabPage-Instanzen verwaltet und zwischen ihnen umschaltet.
Es stellt die Tabs (Reiter) dar und bestimmt, welche TabPage aktuell sichtbar ist.

Eigenschaften

Beispiel

  • Eigenschaft
    Beschreibung oder Erläuterung der Eigenschaft
    • Datentyp: [Variabletyp]
    • Default: Defaultwert

  • Alignment
    Position der Tabs (Top, Bottom, Left, Right)
    • Datentyp: [System.Windows.Forms.TabAlignment]
    • Default: Top
  • Anchor
    Alternative Layoutsteuerung
    • Datentyp: [System.Windows.Forms.AnchorStyles]
    • Default: Top, Left
  • Appearance
    Darstellung der Tabs (Normal, Buttons, FlatButtons)
    • Datentyp: [System.Windows.Forms.TabAppearance]
    • Default: Normal
  • Dock
    Layout innerhalb des Parent-Containers (meist Fill)
    • Datentyp: [System.Windows.Forms.DockStyle]
    • Default: None
  • DrawMode
    Zeichenmodus (Normal, OwnerDrawFixed)
    • Datentyp: [System.Windows.Forms.TabDrawMode]
    • Default: Normal
  • HotTrack
    Hover-Effekt über Tabs
    • Datentyp: [System.Boolean]
    • Default: $false
  • ImageList
    Ermöglicht Icons in Tabs
    • Datentyp: [System.Windows.Forms.ImageList]
    • Default: $null
  • ItemSize
    Größe einzelner Tabs (nur relevant bei Fixed)
    • Datentyp: [System.Drawing.Size]
    • Default: (Width=0, Height=0)
  • Multiline
    Mehrere Reihen von Tabs erlauben
    • Datentyp: [System.Boolean]
    • Default: $false
  • Padding
    Abstand innerhalb der Tab-Headers
    • Datentyp: [System.Windows.Forms.Padding]
    • Default: (6, 3)
  • RowCount
    Anzahl der Tab-Reihen (relevant bei Multiline)
    • Datentyp: [System.Int32]
    • Default: 0 (wird dynamisch berechnet)
  • SelectedImageIndex
    Index des Icons für den aktiven Tab
    • Datentyp: [System.Int32]
    • Default: -1
  • SelectedIndex
    Index des aktuell aktiven Tabs (0-basiert)
    • Datentyp: [System.Int32]
    • Default: -1 (ohne TabPages) / 0 (mit mindestens einer TabPage in der TabPages-Collection)
  • SelectedTab
    Referenz auf die aktuell aktive TabPage
  • ShowToolTips
    Tooltips für Tabs aktivieren
    • Datentyp: [System.Boolean]
    • Default: $false
  • SizeMode
    Größe der Tabs (Normal, Fixed)
    • Datentyp: [System.Windows.Forms.TabSizeMode]
    • Default: Normal
  • TabPages
    Sammlung aller enthaltenen TabPage-Instanzen
    • Datentyp: [System.Windows.Forms.TabControl.TabPageCollection]
    • Default: (leer)

Grundidee

Das TabControl ist die Steuerung, nicht der Inhalt.

  • TabControl → verwaltet Tabs
  • TabPage → enthält den eigentlichen Inhalt

TabControl erstellen


# Klassisch
$tabControl = New-Object System.Windows.Forms.TabControl

# .NET-Style
$tabControl = [System.Windows.Forms.TabControl]::new()

Tab hinzufügen

Ein TabPage kannwird innicht dendirekt zum TabControl hinzugefügt, sondern zur enthaltenen Sammlung $tabControl.TabPages.
Die Sammlung TabPages stellt mehrere Methoden zum Hinzufügen von TabPage-Instanzen bereit:

    TabPages.Add($tabPage1) – Fügt das TabPage $tabPage1 zur Sammlung hinzu TabPages.AddRange(@($tabPage2, $tabPage3)) – Fügt mehrere TabPage-Instanzen gleichzeitig als Array hinzu TabPages.Insert(0, $tabPage4) – Fügt das TabPage an der gewünschten Position innerhalb der Sammlung ein
    # Hinzufügen
    $tabControl.TabPages.Add($tabPage1)
    
    $tabControl.TabPages.Add("Mein Tab") # erstellt TabPage (nur Text)
    $tabControl.TabPages.Add("Name", "Text") # Name + Text
    $tabControl.TabPages.AddRange(@(
        $tabPage2,
        $tabPage3)tabPage3
    ))
    
    $tabControl.TabPages.Insert(0, $tabPage4)
    
    # technischTechnisch möglich, aber nicht empfohlen
    $tabControl.Controls.Add($tabPage4)
    $tabControl.Controls.AddRange(@(
        $tabPage5,
        $tabPage6)tabPage6
    ))
    

    Über Add() kann zusätzlich direkt ein neues TabPage erstellt werden:

    
    # Erstellt ein neues TabPage
    $tabControl.Controls.Remove($tabPage2)TabPages.Add("TabText")
    
    # Erstellt ein neues TabPage mit Name + Text
    $tabControl.Controls.RemoveRange(@($tabPage3,TabPages.Add("TabName", $tabPage4)"TabText")
    

    Tab entfernen

    Ein TabPage kann aus dem TabControl mit der Referenz zum TabPage und Remove() oder über den Index mit RemoveAt() entfernt werden.

    # Referenz
    $tabControl.TabPages.Remove($tabPage1) # Indexmit Referenz
    $tabControl.TabPages.RemoveAt(0) # mit Index

    Mit Clear() werden alle TabPage-Instanzen entfernt.

    # Alle entfernen
    $tabControl.TabPages.Clear()

    Tab-Auswahl

    # Zugriff auf einzelnes TabPage
    $tabControl.TabPages[0]
    
    # Aktiven Tab setzen
    $tabControl.SelectedIndex = 0
    $tabControl.SelectedTab = $tabPage1
    
    

    Events TabControl

    $tabControl.Add_*
      param($sender, $e)
    • $sender → Das TabControl selbst (=$this)
    • $e (EventArgs) → Argumente Tab (TabPage) entsprechend

    Tabwechsel

    Selecting

    Vor dem Wechsel zu einem Tab (TabPage) → kann noch abgebrochen werden

    • $e.TabPage → der Tab, zu dem gewechselt werden soll
    • $e.TabPageIndex → Index davon
    • $e.Cancel → kannst du auf $true setzen → Wechsel wird verhindert

    Selected

    Nach dem Wechsel zu einem Tab (TabPage)

    • $e.TabPage → der Tab, zu dem gewechselt wurde
    • $e.TabPageIndex → Index davon
    $tabControl.Add_Selecting({
        param($sender, $e)
    
        # Ziel-Tab
        $nextTab = $e.TabPage
    
        if ($nextTab.Name -eq "PackageTab") {
            Write-Host "Wechsel verhindert!"
    
            # 🚨 DAS ist der Trick:
            $e.Cancel = $true
        }
    })
    

    SelectedIndexChanged

    Wird ausgelöst, nachdem sich der ausgewählte Tab geändert hat

    • ❌ Kein $e.TabPage
    • $sender.SelectedTab → aktuell aktiver Tab
    • $sender.SelectedIndex → Index des aktiven Tabs
    $sender, $e

    $sender

    • $sender.SelectedTab → aktuell aktiver Tab (TabPage)
    • $sender.SelectedIndex → Index davon
    • $sender.TabPages → alle Tabs (Collection)
    • $sender.TabCount → Anzahl Tabs
    • $sender.Name → Name vom Control
    • $sender.Enabled → ob aktiv
    • $sender.Visible → sichtbar oder nicht

    $e

    • einfach nur ein Standard-EventArgs-Objekt
    • ohne nützliche Zusatzinfos
    $tabControl.Add_SelectedIndexChanged({
        param($sender, $e)
    
        # Aktueller Tab
        $currentTab = $sender.SelectedTab
    
        Write-Host "Aktiver Tab: $($currentTab.Name)"
    })

    Deselecting

    Vor dem Verlassen eines Tabs (TabPage) → kann noch abgebrochen werden

    $tabControl.Add_Deselecting({
        param($sender, $e)
    
        # Aktueller Tab (der verlassen wird)
        $currentTab = $e.TabPage
    
        # Beispiel: Verhindere Verlassen wenn noch Auswahl vorhanden
        if ($currentTab.Name -eq "PackageTab" -and $checkedListBox.CheckedItems.Count -gt 0) {
            Write-Host "Du hast noch Auswahl!"
    
            $e.Cancel = $true
        }
    })
    

    $e (EventArgs)
    $e.TabPage → der Tab, der verlassen wird
    $e.Cancel$true = Wechsel wird verhindert

    Deselected

    Nach dem Verlassen eines Tabs → ideal zum Zurücksetzen von UI

    $tabControl.Add_Deselected({
        param($sender, $e)
    
        # Verlassener Tab
        $oldTab = $e.TabPage
    
        if ($oldTab.Name -eq "PackageTab") {
    
            # CheckedListBox zurücksetzen
            for ($i = 0; $i -lt $checkedListBox.Items.Count; $i++) {
                $checkedListBox.SetItemChecked($i, $false)
            }
    
            # ListBox zurücksetzen
            $listBox.ClearSelected()
        }
    })
    

    $e (EventArgs)
    $e.TabPage → der Tab, der verlassen wurde

    🔍 Konkreter Ablauf beim Tabwechsel

    Wenn du von Tab A → Tab B wechselst:

    1. Deselecting (TabControl)
      → bevor Tab A verlassen wird
      kann abgebrochen werden ($_.Cancel = $true)
    2. Selecting (TabControl)
      → bevor Tab B aktiviert wird
      kann ebenfalls abgebrochen werden

    👉 Wenn hier keiner abbricht, geht’s weiter:

    1. Deselected (TabControl)
      → Tab A wurde gerade deaktiviert
    2. SelectedIndexChanged (TabControl)
      → der Index hat sich geändert
    3. Selected (TabControl)
      → Tab B ist jetzt aktiv
    4. Leave (TabPage A)
      → Fokus verlässt alten Tab
    5. Enter (TabPage B)
      → Fokus betritt neuen Tab

    Click

    Klick auf das Control (selten relevant)


    ControlAdded / ControlRemoved

    Wenn TabPages hinzugefügt oder entfernt werden


    Tipps & Tricks - TabControl


    Typische Stolperfallen

    • Tab wird nicht angezeigt
      → nicht zur TabPages-Collection hinzugefügt
    • Events greifen nicht
      → falsches Event verwendet (Selecting vs. SelectedIndexChanged)
    • Layout wirkt falsch
      Dock / Anchor nicht sauber gesetzt
    • Icons fehlen
      ImageList nicht gesetzt oder falscher Index

    Mentales Modell

    Das TabControl ist ein Container mit Umschalter-Logik.

    Es zeigt genau eine TabPage gleichzeitig
    und verwaltet nur, welche sichtbar ist.


    Wann sinnvoll?

    • Strukturierung komplexer Inhalte
    • Einstellungen / Optionen
    • Platz sparen

    Wann vermeiden?

    • Häufiges Hin- und Herspringen notwendig
    • Linearer Workflow
    • Stark voneinander abhängige Inhalte