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)