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