Skip to main content

TabControl

Namespace: System.Windows.Forms

Properties / Eigenschaften
  • Property – Standardwert
    Beschreibung oder Erläuterung der Eigenschaft

  • AlignmentTop
    Position der Tabs (Top, Bottom, Left, Right)
  • Anchor(Top, Left)
    Alternative Layoutsteuerung
  • AppearanceNormal
    Darstellung der Tabs (Normal, Buttons, FlatButtons)
  • DockNone
    Layout innerhalb des Parent-Containers (meist Fill)
  • DrawModeNormal
    Zeichenmodus (Normal, OwnerDrawFixed)
  • 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)
  • Multiline$false
    Mehrere Reihen von Tabs erlauben
  • Padding(6, 3)
    Abstand innerhalb der Tab-Headers
  • RowCount0
    Anzahl der Tab-Reihen (relevant bei Multiline)
  • SelectedImageIndex-1
    Index des Icons für den aktiven Tab
  • SelectedIndex0
    Index des aktuell aktiven Tabs (0-basiert)
  • SelectedTab$null
    Referenz auf die aktuell aktive TabPage
  • ShowToolTips$false
    Tooltips für Tabs aktivieren
  • SizeModeNormal
    Größe der Tabs (Normal, Fixed)
  • TabPages(leer)
    Sammlung aller enthaltenen TabPage-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

BeimWird Wechselausgelöst, desnachdem Tabssich (TabPages)der ausgewählte Tab geändert hat

  •  Kein $e.TabPage
→ hier ist es $sender.SelectedTab → aktuell aktiver Tab $sender.SelectedIndex → Index des aktiven Tabs
$sender, $e

$sender

    $sender.SelectedTab → aktuell aktiver Tab (TabPage) $sender.SelectedTabsender.SelectedIndexderIndex aktuelldavon ausgewählte$sender.TabPages Tab→ 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_Selecting(Add_SelectedIndexChanged({
          param($sender, $e)
      
          # Ziel-Aktueller Tab
          $nextTabcurrentTab = $e.TabPage
      
          if ($nextTab.Name -eq "PackageTab") {sender.SelectedTab
      
          Write-Host "WechselAktiver verhindert!"
      
              # 🚨 DAS ist der Trick:Tab: $e.Cancel = ($true
          }currentTab.Name)"
      })
      

      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