Skip to main content

TabControl

Ein TabControl ist ein Container, der mehrere TabPageTabPage-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

Ohne TabPage ist das TabControl nur leere UI-Deko.


Wichtige Eigenschaften

  • TabPages – (leer)
    Sammlung aller enthaltenen TabPage-Instanzen

  • SelectedIndex – -1 → 0 (mit erstem TabPage)
    Index des aktuell aktiven Tabs (0-basiert)

  • SelectedTab – $null
    Referenz auf die aktuell aktive TabPage

  • Alignment – "Top"
    Position der Tabs (Top, Bottom, Left, Right)

  • Appearance – "Normal"
    Darstellung der Tabs (Normal, Buttons, FlatButtons)

  • SizeMode – "Normal"
    Größe der Tabs (Normal, Fixed)

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

  • Multiline – $false
    Mehrere Reihen von Tabs erlauben

  • HotTrack – $false
    Hover-Effekt über Tabs

  • Dock – None
    Layout innerhalb des Parent-Containers (meist Fill)


TabControl erstellen

# TabControl Erstellen
$tabControl = New-Object System.Windows.Forms.TabControl
$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 gesetzt)
$tabControl.TabPages.Add("Name", "Text") # Name + Text
$tabControl.TabPages.AddRange(@($tabPage2, $tabPage3)) # mehrere TabPages
$tabControl.TabPages.Insert(0, $tabPage4) # Index, TabPage

# Entfernen
$tabControl.TabPages.Remove($tabPage1)
$tabControl.TabPages.RemoveAt(0) # per Index
$tabControl.TabPages.Clear() # alle entfernen


# 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] 

# Zugriff auf aktuelles TabPage
$tabControl.SelectedIndex = 0 # nur Index
$tabControl.SelectedTab = $tabPage1

Events

Hier passiert der eigentliche Spaß.

  • SelectedIndexChanged
    Wird ausgelöst, nachdem der Tab gewechselt wurde

  • Selecting
    Wird ausgelöst, bevor ein Tab gewechselt wird
    → kann abgebrochen werden ($_.Cancel = $true)

  • Selected
    Wird ausgelöst, nachdem ein Tab ausgewählt wurde (ähnlich wie SelectedIndexChanged, aber mit EventArgs)

  • Deselecting / Deselected
    Beim Verlassen eines Tabs


Beispiel: Tab-Wechsel verhindern

$tabControl.add_Selecting({
    if ($tabControl.SelectedIndex -eq 0) {
        $_.Cancel = $true
    }
})

Typische Stolperfallen

  • Events greifen nicht richtig
    → falsches Event gewählt (SelectedIndexChanged vs. Selecting)

  • Tabs sehen komisch aus
    → Kombination aus Appearance, SizeMode und ItemSize

  • Layout bricht
    Dock oder Anchor nicht sauber gesetzt

  • Falscher Zugriff auf Inhalte
    → Inhalt liegt in TabPage.Controls, nicht direkt im TabControl


Mentales Modell

Das TabControl ist ein Umschalter für Container.

Es zeigt immer genau eine TabPage gleichzeitig an
und blendet die anderen intern einfach aus.


Wann sinnvoll?

  • Mehrere logisch getrennte Bereiche

  • Einstellungen / Konfigurationen

  • Platz sparen ohne mehrere Fenster


Wann vermeiden?

  • Wenn Nutzer ständig zwischen Tabs springen müssen

  • Wenn Inhalte stark voneinander abhängen

  • Wenn der Workflow linear ist (→ lieber Schritt für Schritt UI)