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 enthaltenenTabPage-Instanzen -
SelectedIndex – -1 → 0 (mit erstem TabPage)
Index des aktuell aktiven Tabs (0-basiert) -
SelectedTab – $null
Referenz auf die aktuell aktiveTabPage -
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 beiFixed) -
Multiline – $false
Mehrere Reihen von Tabs erlauben -
HotTrack – $false
Hover-Effekt über Tabs -
Dock – None
Layout innerhalb des Parent-Containers (meistFill)
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 wieSelectedIndexChanged, 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 (SelectedIndexChangedvs.Selecting) -
Tabs sehen komisch aus
→ Kombination ausAppearance,SizeModeundItemSize -
Layout bricht
→DockoderAnchornicht sauber gesetzt -
Falscher Zugriff auf Inhalte
→ Inhalt liegt inTabPage.Controls, nicht direkt imTabControl
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)