Skip to main content

TabControl

TabControl (System.Windows.Forms)

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"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 bei Fixed)

  • Multiline$falseFalse
    Mehrere Reihen von Tabs erlauben

  • HotTrack$falseFalse
    Hover-Effekt über Tabs

  • DockNone
    Layout innerhalb des Parent-Containers (meist Fill)

  • Anchor – (Top, Left)
    Alternative Layoutsteuerung

Padding – (6, 3)
Abstand innerhalb der Tab-Headers

RowCount – 0
Anzahl der Tab-Reihen (relevant bei Multiline)

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
    WirdVor ausgelöst,dem bevorWechsel ein Tab gewechselt wird
    → kann abgebrochen werden ($_.Cancel = $true)

  • Selected
    WirdNach ausgelöst,Auswahl nachdemeines ein Tab ausgewählt wurdeTabs (ähnlich wie SelectedIndexChanged, aber mit EventArgs)

  • Deselecting / Deselected
    Beim Verlassen eines Tabs


Click
Klick

Beispiel:auf Tab-Wechseldas verhindern

$tabControl.add_Selecting({
    ifControl ($tabControl.SelectedIndexselten -eqrelevant)
0)
{ $_.Cancel

ControlAdded =/ $trueControlRemoved
Wenn }TabPages })hinzugefügt oder entfernt werden


Typische Stolperfallen

  • Tab wird nicht angezeigt
    → nicht zur TabPages-Collection hinzugefügt

Events greifen nicht richtig
→ falsches Event gewähltverwendet (SelectedIndexChangedSelecting vs. SelectingSelectedIndexChanged)

Tabs sehen komisch aus
→ Kombination aus Appearance, SizeMode und ItemSize

Layout brichtwirkt falsch
Dock oder/ Anchor nicht sauber gesetzt

FalscherIcons Zugriff auf Inhaltefehlen
Inhalt liegt in TabPage.ControlsImageList, nicht direktgesetzt imoder TabControlfalscher Index


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?

  • MehrereStrukturierung logischkomplexer getrennte BereicheInhalte

  • Einstellungen / KonfigurationenOptionen

  • Platz sparen ohne mehrere Fenster


Wann vermeiden?

  • WennHäufiges NutzerHin- ständigund zwischenHerspringen Tabs springen müssennotwendig

  • WennLinearer Inhalte stark voneinander abhängenWorkflow

  • WennStark dervoneinander Workflowabhängige linear ist (→ lieber Schritt für Schritt UI)Inhalte