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.

Eigenschaften

Beispiel Eigenschaft

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

                                      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

                                      # 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)
                                      
                                      # 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 entfernen

                                      Ein TabPage kann aus dem TabControl mit der Referenz zum TabPage und Remove() oder über den Index mit RemoveAt() entfernt werden.

                                      # Referenz
                                      $tabControl.TabPages.Remove($tabPage1)
                                      
                                      # Index
                                      $tabControl.TabPages.RemoveAt(0)

                                      Mit Clear() werden alle TabPage-Instanzen entfernt.

                                      # Alle entfernen
                                      $tabControl.TabPages.Clear()

                                      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

                                      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)


                                      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