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 TabsTabPage→ enthält den eigentlichen Inhalt
Wichtige Eigenschaften
TabPages – (leer)
Sammlung aller enthaltenenTabPage-InstanzenSelectedIndex – 0
Index des aktuell aktiven Tabs (0-basiert)SelectedTab – $null
Referenz auf die aktuell aktiveTabPageAlignment – 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 erlaubenHotTrack – False
Hover-Effekt über TabsDock – None
Layout innerhalb des Parent-Containers (meistFill)Anchor – (Top, Left)
Alternative LayoutsteuerungPadding – (6, 3)
Abstand innerhalb der Tab-HeadersRowCount – 0
Anzahl der Tab-Reihen (relevant beiMultiline)DrawMode – Normal
Zeichenmodus (Normal,OwnerDrawFixed)ShowToolTips – False
Tooltips für Tabs aktivierenImageList – $null
Ermöglicht Icons in TabsSelectedImageIndex – -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
- TabControl
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 zurTabPages-Collection hinzugefügtEvents greifen nicht
→ falsches Event verwendet (Selectingvs.SelectedIndexChanged)Layout wirkt falsch
→Dock/Anchornicht sauber gesetztIcons fehlen
→ImageListnicht 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