TabControl
TabControl (System.Windows.Forms)
Ein TabControl ist ein Container, der mehrere TabPage-Instanzen verwaltet und zwischen ihnen umschaltet.TabPage
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"Top
Position der Tabs (Top,Bottom,Left,Right) -
Appearance –
"Normal"Normal
Darstellung der Tabs (Normal,Buttons,FlatButtons) -
SizeMode –
"Normal"Normal
Größe der Tabs (Normal,Fixed) -
ItemSize –
{(Width=0, Height=0}0)
Größe einzelner Tabs (nur relevant beiFixed) -
Multiline –
$falseFalse
Mehrere Reihen von Tabs erlauben -
HotTrack –
$falseFalse
Hover-Effekt über Tabs -
Dock – None
Layout innerhalb des Parent-Containers (meistFill) -
Anchor – (Top, Left)
Alternative Layoutsteuerung -
Padding – (6, 3)
Abstand innerhalb der Tab-Headers -
RowCount – 0
Anzahl der Tab-Reihen (relevant beiMultiline) -
DrawMode – Normal
Zeichenmodus (Normal,OwnerDrawFixed) -
ShowToolTips – False
Tooltips für Tabs aktivieren -
ImageList – $null
Ermöglicht Icons in Tabs -
SelectedImageIndex – -1
Index des Icons für den aktiven Tab
TabControl erstellen
# TabControl ErstellenKlassisch
$tabControl = New-Object System.Windows.Forms.TabControl
# .NET-Style
$tabControl = [System.Windows.Forms.TabControl]::New(new()
Tab hinzufügen / entfernen
# Hinzufügen
$tabControl.TabPages.Add($tabPage1)
$tabControl.TabPages.Add("Mein Tab") # erstellt TabPage (nur Text gesetzt)Text)
$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]
# ZugriffAktiven aufTab aktuelles TabPagesetzen
$tabControl.SelectedIndex = 0 # nur Index
$tabControl.SelectedTab = $tabPage1
Events
Hier passiert der eigentliche Spaß.
-
SelectedIndexChanged
Wird ausgelöst, nachdem der Tab gewechselt wurde -
Selecting
WirdVorausgelöst,dembevorWechselein Tab gewechselt wird
→ kann abgebrochen werden($_.Cancel = $true) -
Selected
WirdNachausgelöst,Auswahlnachdemeinesein Tab ausgewählt wurdeTabs (ähnlich wieSelectedIndexChanged, abermit EventArgs) -
Deselecting / Deselected
Beim Verlassen eines Tabs
Click
Klick
Beispiel:auf Tab-Wechseldas verhindern
$tabControl.add_Selecting({
ifControl ($tabControl.SelectedIndexselten -eqrelevant)
0)ControlAdded =/ $trueControlRemoved
Wenn }TabPages })hinzugefügt oder entfernt werden
Typische Stolperfallen
-
Tab wird nicht angezeigt
→ nicht zurTabPages-Collection hinzugefügt -
Events greifen nicht
richtig
→ falsches Eventgewähltverwendet (vs.SelectedIndexChangedSelecting)SelectingSelectedIndexChanged -
Tabs sehen komisch aus→ Kombination ausAppearance,SizeModeundItemSize Layout
brichtwirkt falsch
→Dockoder/Anchornicht sauber gesetzt-
FalscherIconsZugriff auf Inhaltefehlen
→Inhalt liegt inTabPage.ControlsImageList,nichtdirektgesetztimoderfalscher IndexTabControl
Mentales Modell
Das TabControl ist ein UmschalterContainer fürmit ContainerUmschalter-Logik.
Es zeigt immer genau eine TabPage gleichzeitig an
und blendetverwaltet dienur, anderenwelche internsichtbar einfach aus.ist.
Wann sinnvoll?
-
MehrereStrukturierunglogischkomplexergetrennte BereicheInhalte -
Einstellungen /
KonfigurationenOptionen -
Platz sparen
ohne mehrere Fenster
Wann vermeiden?
-
WennHäufigesNutzerHin-ständigundzwischenHerspringenTabs springen müssennotwendig -
WennLinearerInhalte stark voneinander abhängenWorkflow -
WennStarkdervoneinanderWorkflowabhängigelinear ist (→ lieber Schritt für Schritt UI)Inhalte