Skip to main content

TabControl

TabControl (System.Windows.Forms)

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.


Grundidee

Das TabControl ist die Steuerung, nicht der Inhalt.

  • TabControl → verwaltet Tabs

  • TabPage → enthält den eigentlichen Inhalt


Wichtige Eigenschaften

  • TabPages(leer)
    Sammlung aller enthaltenen TabPage-Instanzen

  • SelectedIndex0
    Index des aktuell aktiven Tabs (0-basiert)

  • SelectedTab$null
    Referenz auf die aktuell aktive TabPage

  • AlignmentTop
    Position der Tabs (Top, Bottom, Left, Right)

  • AppearanceNormal
    Darstellung der Tabs (Normal, Buttons, FlatButtons)

  • SizeModeNormal
    Größe der Tabs (Normal, Fixed)

  • ItemSize(Width=0, Height=0)
    Größe einzelner Tabs (nur relevant bei Fixed)

  • MultilineFalse
    Mehrere Reihen von Tabs erlauben

  • HotTrackFalse
    Hover-Effekt über Tabs

  • DockNone
    Layout innerhalb des Parent-Containers (meist Fill)

  • Anchor(Top, Left)
    Alternative Layoutsteuerung

  • Padding(6, 3)
    Abstand innerhalb der Tab-Headers

  • RowCount0
    Anzahl der Tab-Reihen (relevant bei Multiline)

  • DrawModeNormal
    Zeichenmodus (Normal, OwnerDrawFixed)

  • ShowToolTipsFalse
    Tooltips für Tabs aktivieren

  • ImageList$null
    Ermöglicht Icons in Tabs

  • SelectedImageIndex-1
    Index des Icons für den aktiven Tab


TabControl erstellen

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

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

Tab hinzufügen / entfernen

# 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))
$tabControl.TabPages.Insert(0, $tabPage4)

# Entfernen
$tabControl.TabPages.Remove($tabPage1)
$tabControl.TabPages.RemoveAt(0)
$tabControl.TabPages.Clear()

# technisch möglich, aber nicht empfohlen
$tabControl.Controls.Add($tabPage4)
$tabControl.Controls.AddRange(@($tabPage5, $tabPage6))
$tabControl.Controls.Remove($tabPage2)
$tabControl.Controls.RemoveRange(@($tabPage3, $tabPage4))

Tab-Auswahl

# Zugriff auf einzelnes TabPage
$tabControl.TabPages[0]

# Aktiven Tab setzen
$tabControl.SelectedIndex = 0
$tabControl.SelectedTab = $tabPage1

Events

Selecting

Vor dem Wechsel von einem TabPage → kann noch abgebrochen werden

$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
    }
})

$sender
Das $tabControl selbst
→ brauchst du selten

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

SelectedIndexChanged

Wird ausgelöst, nachdem der Tab gewechselt wurde

$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
    }
})

Selected

Nach Auswahl eines Tabs (mit EventArgs)

Deselecting / Deselected

Beim Verlassen eines Tabs

Click

Klick auf das Control (selten relevant)

ControlAdded / ControlRemoved

Wenn TabPages hinzugefügt oder entfernt werden


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