Skip to main content

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 Inhalt
TabControl 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

  • Alignment
    Position der Tabs (Top, Bottom, Left, Right)
    • Datentyp: [System.Windows.Forms.TabAlignment]
    • Default: Top
  • Anchor
    Alternative Layoutsteuerung
    • Datentyp: [System.Windows.Forms.AnchorStyles]
    • Default: Top, Left
  • Appearance
    Darstellung der Tabs (Normal, Buttons, FlatButtons)
    • Datentyp: [System.Windows.Forms.TabAppearance]
    • Default: Normal
  • Dock
    Layout innerhalb des Parent-Containers (meist Fill)
    • Datentyp: [System.Windows.Forms.DockStyle]
    • Default: None
  • DrawMode
    Zeichenmodus (Normal, OwnerDrawFixed)
    • Datentyp: [System.Windows.Forms.TabDrawMode]
    • Default: Normal
  • HotTrack
    Hover-Effekt über Tabs
    • Datentyp: [System.Boolean]
    • Default: $false
  • ImageList
    Ermöglicht Icons in Tabs
    • Datentyp: [System.Windows.Forms.ImageList]
    • Default: $null
  • ItemSize
    Größe einzelner Tabs (nur relevant bei Fixed)
    • Datentyp: [System.Drawing.Size]
    • Default: (Width=0, Height=0)
  • Multiline
    Mehrere Reihen von Tabs erlauben
    • Datentyp: [System.Boolean]
    • Default: $false
  • Padding
    Abstand innerhalb der Tab-Headers
    • Datentyp: [System.Windows.Forms.Padding]
    • Default: (6, 3)
  • RowCount
    Anzahl der Tab-Reihen (relevant bei Multiline)
    • Datentyp: [System.Int32]
    • Default: 0 (wird dynamisch berechnet)
  • SelectedImageIndex
    Index des Icons für den aktiven Tab
    • Datentyp: [System.Int32]
    • Default: -1
  • SelectedIndex – Index des aktuell aktiven Tabs
  • SelectedTab
    Referenz auf die aktuell aktive TabPage
  • ShowToolTips
    Tooltips für Tabs aktivieren
    • Datentyp: [System.Boolean]
    • Default: $false
  • SizeMode
    Größe der Tabs (Normal, Fixed)
    • Datentyp: [System.Windows.Forms.TabSizeMode]
    • Default: Normal
  • TabPages
    Sammlung aller enthaltenen TabPage-Instanzen
    • Datentyp: [System.Windows.Forms.TabControl.TabPageCollection]
    • Default: (leer)

SelectedIndex [System.Int32]

Der Wert von SelectedIndex ist das jeweilige Index vom TabPage, welches momentan aktiv ist. Die TabPages-Collection ist 0-basiert und der Standarwert ist 0. Wenn sich aber kein TabPage in der TabPage-Collection befindet, ist der Wert -1.


Methoden TabControl

Methoden

Beispiel

  • Methode ( Param )
    Beschreibung oder Erläuterung wofür die Methode ist oder was sie macht

    GetTabRect ( TabPageIndex )
    Gibt die Position und Größe vom TabPage-Reiter zurück

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 das TabPage $tabPage1 zur Sammlung hinzu
  • TabPages.AddRange(@($tabPage2, $tabPage3)) – Fügt mehrere TabPage-Instanzen gleichzeitig als Array hinzu
  • TabPages.Insert(0, $tabPage4) – Fügt das TabPage an 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

  • Event
     – Erläuterung wann Event ausgelöst wird

  • Selecting
     – 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
SelectedIndexChanged – Ausgewählter TabPage hat sich geändert
  • Click
     – Mausklick auf das TabControl

DoubleClick – Doppelklick auf das TabControl MouseDown – Maustaste wurde auf dem TabControl gedrückt MouseMove – Maus wurde über dem TabControl bewegt MouseUp – Gedrückte Maustaste wurde auf dem TabControl losgelassen MouseEnter – Mauszeiger betritt den Bereich des TabControl MouseLeave – Mauszeiger verlässt den Bereich des TabControl DragDrop – Element wurde per Drag&Drop auf dem TabControl abgelegt KeyDown – Taste wurde gedrückt während das TabControl den Fokus hat
  • ControlAdded
     – Dem TabControl wurde ein TabPage hinzugefügt
  • ControlRemoved
     – Vom TabControl wurde ein TabPage entfernt
    Resize – Größe des TabControl hat sich geändert Paint – TabControl wird neu gezeichnet
    $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 $true setzen → 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:

    1. Deselecting (TabControl)
      → bevor Tab A verlassen wird
      kann abgebrochen werden ($_.Cancel = $true)
    2. Selecting (TabControl)
      → bevor Tab B aktiviert wird
      kann ebenfalls abgebrochen werden

    👉 Wenn hier keiner abbricht, geht’s weiter:

    1. Deselected (TabControl)
      → Tab A wurde gerade deaktiviert
    2. SelectedIndexChanged (TabControl)
      → der Index hat sich geändert
    3. Selected (TabControl)
      → Tab B ist jetzt aktiv
    4. Leave (TabPage A)
      → Fokus verlässt alten Tab
    5. Enter (TabPage B)
      → Fokus betritt neuen Tab

    Click

    Klick auf das Control (selten relevant)

    MouseDown

    Klick einer beliebigen Maustaste auf dem TabControl

      $e.Button – gedrückte Maustaste → [MouseButtons]::Left $e.Location – Position des Mausklicks

      ControlAdded / ControlRemoved

      Wenn TabPages hinzugefügt oder entfernt werden


      Tipps & Tricks - TabControl


      Typische Stolperfallen

      • Tab wird nicht angezeigt
        → nicht zur TabPages-Collection hinzugefügt
      • Events greifen nicht
        → falsches Event verwendet (Selecting vs. SelectedIndexChanged)
      • Layout wirkt falsch
        Dock / Anchor nicht sauber gesetzt
      • Icons fehlen
        ImageList nicht 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