Skip to main content

TabControl

Namespace: System.Windows.Forms

Properties / Eigenschaften
  • TabPagesProperty – (leer)Standardwert
    SammlungBeschreibung alleroder enthaltenenErläuterung TabPage-Instanzender Eigenschaft
  • SelectedIndex

 0
Index

des
aktuell aktiven Tabs (0-basiert)
  • SelectedTab – $null
    Referenz auf die aktuell aktive TabPage
    • AlignmentTop
      Position der Tabs (Top, Bottom, Left, Right)
    • Anchor – (Top, Left)
      Alternative Layoutsteuerung
    • AppearanceNormal
      Darstellung der Tabs (Normal, Buttons, FlatButtons)
    • SizeModeDock – None
      Layout innerhalb des Parent-Containers (meist Fill)
    • DrawModeNormal
      Größe der TabsZeichenmodus (Normal, FixedOwnerDrawFixed)
    • HotTrack – False
      Hover-Effekt über Tabs
    • ImageList – $null
      Ermöglicht Icons in Tabs
    • ItemSize(Width=0, Height=0)
      Größe einzelner Tabs (nur relevant bei Fixed)
    • MultilineFalse
      Mehrere Reihen von Tabs erlauben
    • HotTrack – False
      Hover-Effekt über Tabs
    • Dock – None
      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)
    • DrawModeSelectedImageIndexNormal-1
      ZeichenmodusIndex des Icons für den aktiven Tab
    • SelectedIndex – 0
      Index des aktuell aktiven Tabs (Normal,0-basiert)
    • SelectedTab – $null
      Referenz auf die aktuell aktive OwnerDrawFixedTabPage)
    • ShowToolTipsFalse
      Tooltips für Tabs aktivieren
    • ImageListSizeMode$nullNormal
      ErmöglichtGröße Icons inder Tabs (Normal, Fixed)
    • SelectedImageIndexTabPages-1(leer)
      IndexSammlung desaller Iconsenthaltenen für den aktiven TabTabPage-Instanzen

    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()
    
    

    Tab hinzufügen / entfernen

    # Hinzufügen
    $tabControl.TabPages.Add($tabPage1)
    $tabControl.TabPages.Add("Mein Tab") # erstellt TabPage (nur Text)
    $tabControl.TabPages.Add("Name", "Text") # Name + Text
    $tabControl.TabPages.AddRange(@($tabPage2, $tabPage3))
    $tabControl.TabPages.Insert(0, $tabPage4)
    
    # Entfernen
    $tabControl.TabPages.Remove($tabPage1)
    $tabControl.TabPages.RemoveAt(0)
    $tabControl.TabPages.Clear()
    
    # 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]
    
    # Aktiven Tab setzen
    $tabControl.SelectedIndex = 0
    $tabControl.SelectedTab = $tabPage1
    
    

    Events TabControl

    $tabControl.Add_*
      param($sender, $e)
    • $sender → Das TabControl selbst (=$this)
    • $e (EventArgs) → Argumente Tab (TabPage) entsprechend


    Selecting / Selected

    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

    Beim Wechsel des Tabs (TabPages)

    • $e.TabPage → hier ist es $sender.SelectedTab
    • $sender.SelectedTab → der aktuell ausgewählte Tab
    $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
        }
    })
    

    Deselecting / Deselected

    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


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