TabControl
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 InhaltTabControl erstellen
# Klassisch
$tabControl = New-Object System.Windows.Forms.TabControl
# .NET-Style
$tabControl = [System.Windows.Forms.TabControl]::new()
Eigenschaften - TabControl
Eigenschaften
Beispiel
- Eigenschaft
Beschreibung oder Erläuterung der Eigenschaft
- Datentyp:
[Variabletyp] - Default:
Defaultwert
- Datentyp:
- Alignment
Position der Tabs (Top,Bottom,Left,Right)- Datentyp:
[System.Windows.Forms.TabAlignment] - Default:
Top
- Datentyp:
- Anchor
Alternative Layoutsteuerung
- Datentyp:
[System.Windows.Forms.AnchorStyles] - Default:
Top, Left
- Datentyp:
- Appearance
Darstellung der Tabs (Normal,Buttons,FlatButtons)
- Datentyp:
[System.Windows.Forms.TabAppearance] - Default:
Normal
- Datentyp:
- Dock
Layout innerhalb des Parent-Containers (meistFill)
- Datentyp:
[System.Windows.Forms.DockStyle] - Default:
None
- Datentyp:
- DrawMode
Zeichenmodus (Normal,OwnerDrawFixed)
- Datentyp:
[System.Windows.Forms.TabDrawMode] - Default:
Normal
- Datentyp:
- HotTrack
Hover-Effekt über Tabs
- Datentyp:
[System.Boolean] - Default:
$false
- Datentyp:
- ImageList
Ermöglicht Icons in Tabs
- Datentyp:
[System.Windows.Forms.ImageList] - Default:
$null
- Datentyp:
- ItemSize
Größe einzelner Tabs (nur relevant beiFixed)
- Datentyp:
[System.Drawing.Size] - Default:
(Width=0, Height=0)
- Datentyp:
- Multiline
Mehrere Reihen von Tabs erlauben
- Datentyp:
[System.Boolean] - Default:
$false
- Datentyp:
- Padding
Abstand innerhalb der Tab-Headers
- Datentyp:
[System.Windows.Forms.Padding] - Default:
(6, 3)
- Datentyp:
- RowCount
Anzahl der Tab-Reihen (relevant beiMultiline)
- Datentyp:
[System.Int32] - Default:
0(wird dynamisch berechnet)
- Datentyp:
- SelectedImageIndex
Index des Icons für den aktiven Tab
- Datentyp:
[System.Int32] - Default:
-1
- Datentyp:
- SelectedIndex
– Index des aktuell aktiven Tabs(0-basiert) Datentyp:[System.Int32]
-10TabPageReferenz auf die aktuell aktive
TabPage- Datentyp:
[System.Windows.Forms.TabPage] - Default:
$null
Tooltips für Tabs aktivieren
- Datentyp:
[System.Boolean] - Default:
$false
Größe der Tabs (
Normal, Fixed)- Datentyp:
[System.Windows.Forms.TabSizeMode] - Default:
Normal
Sammlung aller enthaltenen
TabPage-Instanzen- Datentyp:
[System.Windows.Forms.TabControl.TabPageCollection] - Default:
(leer)
SelectedIndex
Grundidee
[System.Int32]
DasDer Wert von ist TabControlSelectedIndexdiedas Steuerungjeweilige Index vom TabPage, nichtwelches momentan aktiv ist. Die TabPages-Collection ist 0-basiert und der Inhalt.Standarwert ist 0. Wenn sich aber kein TabPage in der TabPage-Collection befindet, ist der Wert -1.
Methoden - TabControl
Methoden
Beispiel
MethodeTabControl→(verwaltetParamTabs
Beschreibung
TabPageoder GetTabRect ( TabPageIndex )
Gibt die Position und Größe vom TabPage-Reiter zurück
TabControl erstellen
# Klassisch
$tabControl = New-Object System.Windows.Forms.TabControl
# .NET-Style
$tabControl = [System.Windows.Forms.TabControl]::new()Tab hinzufügen
Ein TabPage wird nicht direkt zum TabControl hinzugefügt, sondern zur enthaltenen Sammlung $tabControl.TabPages.
Die Sammlung TabPages stellt mehrere Methoden zum Hinzufügen von TabPage-Instanzen bereit:
TabPages.Add($tabPage1)– Fügt dasTabPage$tabPage1zur Sammlung hinzuTabPages.AddRange(@($tabPage2, $tabPage3))– Fügt mehrereTabPage-Instanzen gleichzeitig als Array hinzuTabPages.Insert(0, $tabPage4)– Fügt dasTabPagean der gewünschten Position innerhalb der Sammlung ein
$tabControl.TabPages.Add($tabPage1)
$tabControl.TabPages.AddRange(@(
$tabPage2,
$tabPage3
))
$tabControl.TabPages.Insert(0, $tabPage4)
# Technisch möglich, aber nicht empfohlen
$tabControl.Controls.Add($tabPage4)
$tabControl.Controls.AddRange(@(
$tabPage5,
$tabPage6
))
Über Add() kann zusätzlich direkt ein neues TabPage erstellt werden:
# Erstellt ein neues TabPage
$tabControl.TabPages.Add("TabText")
# Erstellt ein neues TabPage mit Name + Text
$tabControl.TabPages.Add("TabName", "TabText")
Tab entfernen
Ein TabPage kann aus dem TabControl mit der Referenz zum TabPage und Remove() oder über den Index mit RemoveAt() entfernt werden.
$tabControl.TabPages.Remove($tabPage1) # mit Referenz
$tabControl.TabPages.RemoveAt(0) # mit Index
Mit Clear() werden alle TabPage-Instanzen entfernt.
# Alle entfernen
$tabControl.TabPages.Clear()
Tab-Auswahl
Mit dem jeweiligen Index vom TabPage, kann in TabPages direkt auf das TabPage zugegriffen werden.
# Zugriff auf einzelnes TabPage
$tabControl.TabPages[0]
# Aktiven Tab setzen
$tabControl.SelectedIndex = 0
$tabControl.SelectedTab = $tabPage1
Events - TabControl
Events
Beispiel
Erläuterung wann Event ausgelöst wird
Vor dem Wechsel zum TabPage Selected
Nach dem Wechsel zum TabPage SelectedIndexChanged
Ausgewählter TabPage hat sich geändert
Deselecting
Vor dem Verlassen vom TabPage Deselected
Nach dem Verlassen vom TabPage
Click
Mausklick auf das TabControl
ControlAdded
Dem TabControl wurde ein TabPage hinzugefügt ControlRemoved
Vom TabControl wurde ein TabPage entfernt
$tabControl.Add_*
param($sender, $e)
$sender→ Das TabControl selbst (=$this)$e(EventArgs) → Argumente Tab (TabPage) entsprechend
Tabwechsel
Selecting
Vor dem Wechsel zu einem Tab (TabPage) → kann noch abgebrochen werden
$e.TabPage→ der Tab, zu dem gewechselt werden soll$e.TabPageIndex→ Index davon$e.Cancel→ kannst du auf$truesetzen → Wechsel wird verhindert
Selected
Nach dem Wechsel zu einem Tab (TabPage)
$e.TabPage→ der Tab, zu dem gewechselt wurde$e.TabPageIndex→ Index davon
$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
}
})
SelectedIndexChanged
Wird ausgelöst, nachdem sich der ausgewählte Tab geändert hat
- ❌ Kein
$e.TabPage - ✅
$sender.SelectedTab→ aktuell aktiver Tab - ✅
$sender.SelectedIndex→ Index des aktiven Tabs
$sender, $e
$sender
$sender.SelectedTab→ aktuell aktiver Tab (TabPage)$sender.SelectedIndex→ Index davon$sender.TabPages→ alle Tabs (Collection)$sender.TabCount→ Anzahl Tabs$sender.Name→ Name vom Control$sender.Enabled→ ob aktiv$sender.Visible→ sichtbar oder nicht
$e
- einfach nur ein Standard-EventArgs-Objekt
- ohne nützliche Zusatzinfos
$tabControl.Add_SelectedIndexChanged({
param($sender, $e)
# Aktueller Tab
$currentTab = $sender.SelectedTab
Write-Host "Aktiver Tab: $($currentTab.Name)"
})
Deselecting
Vor dem Verlassen eines Tabs (TabPage) → kann noch abgebrochen werden
$tabControl.Add_Deselecting({
param($sender, $e)
# Aktueller Tab (der verlassen wird)
$currentTab = $e.TabPage
# Beispiel: Verhindere Verlassen wenn noch Auswahl vorhanden
if ($currentTab.Name -eq "PackageTab" -and $checkedListBox.CheckedItems.Count -gt 0) {
Write-Host "Du hast noch Auswahl!"
$e.Cancel = $true
}
})
$e (EventArgs)
• $e.TabPage → der Tab, der verlassen wird
• $e.Cancel → $true = Wechsel wird verhindert
Deselected
Nach dem Verlassen eines Tabs → ideal zum Zurücksetzen von UI
$tabControl.Add_Deselected({
param($sender, $e)
# Verlassener Tab
$oldTab = $e.TabPage
if ($oldTab.Name -eq "PackageTab") {
# CheckedListBox zurücksetzen
for ($i = 0; $i -lt $checkedListBox.Items.Count; $i++) {
$checkedListBox.SetItemChecked($i, $false)
}
# ListBox zurücksetzen
$listBox.ClearSelected()
}
})
$e (EventArgs)
• $e.TabPage → der Tab, der verlassen wurde
🔍 Konkreter Ablauf beim Tabwechsel
Wenn du von Tab A → Tab B wechselst:
Deselecting(TabControl)
→ bevor Tab A verlassen wird
→ kann abgebrochen werden ($_.Cancel = $true)Selecting(TabControl)
→ bevor Tab B aktiviert wird
→ kann ebenfalls abgebrochen werden
👉 Wenn hier keiner abbricht, geht’s weiter:
Deselected(TabControl)
→ Tab A wurde gerade deaktiviertSelectedIndexChanged(TabControl)
→ der Index hat sich geändertSelected(TabControl)
→ Tab B ist jetzt aktivLeave(TabPage A)
→ Fokus verlässt alten TabEnter(TabPage B)
→ Fokus betritt neuen Tab
Click
Klick auf das Control (selten relevant)
ControlAdded / ControlRemoved
Wenn TabPages hinzugefügt oder entfernt werden
Tipps & Tricks - TabControl
Typische Stolperfallen
- Tab wird nicht angezeigt
→ nicht zurTabPages-Collection hinzugefügt - Events greifen nicht
→ falsches Event verwendet (Selectingvs.SelectedIndexChanged) - Layout wirkt falsch
→Dock/Anchornicht sauber gesetzt - Icons 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