# TabPage

Eine `TabPage` ist im Grunde eine einzelne Seite innerhalb eines [`TabControl`](https://doku.borinas.com/books/powershell-programmierung/page/tabcontrol "TabControl").  
Sie stellt den Inhalt dar, der angezeigt wird, wenn ein bestimmter Tab ausgewählt ist.

<details id="bkmrk-eigenschaften-beispi"><summary>Eigenschaften</summary>

<span style="text-decoration: underline;">***Beispiel Eigenschaft***</span>

- ***Eigenschaft**– Standardwert*  
    Beschreibung oder Erläuterung der Eigenschaft

---

- **Text** –   
    Der Titel des Tabs (sichtbar im Reiter)
- **Name** –   
    Interner Name zur Referenzierung im Code
- **Controls** –   
    Sammlung aller enthaltenen Controls
- **Dock** –   
    Bestimmt, wie sich die TabPage innerhalb des `TabControl` verhält  
    (meist automatisch `Fill`, alles andere ist selten sinnvoll)
- **Enabled** –   
    Legt fest, ob der Tab auswählbar ist
- **Visible** –   
    Bestimmt, ob der Tab angezeigt wird
- **ForeColor** –   
    Farben der Seite (abhängig vom Theme)
- **BackColor** –   
    Farben der Seite (abhängig vom Theme)
- **Padding** –   
    Innenabstand zum Rand

</details>---

### Grundidee

Ein `TabControl` ist der Container für die jeweiligen `TabPage`-Instanzen.  
`TabPage` beinhaltet den sichtbaren Inhalt und `TabControl` ist das möglichmachende Gerüst.

---

### Beispiel (PowerShell)

```powershell
$tabControl = [System.Windows.Forms.TabControl]::New()

# Erstellen
$tabPage1 = New-Object System.Windows.Forms.TabPage
$tabPage2 = [System.Windows.Forms.TabPage]::New()

# Hinzufügen
$tabControl.TabPages.Add($tabPage2) # TabPage → TabControl

# Erstellen & Hinzufügen
$tabControl.TabPages.Add("Dritter Tab") # Text = "Dritter Tab"
$tabControl.TabPages.Add("tabPage4", "Vierter Tab") # Name = "tabPage4", Text = "Vierter Tab"
```

---

### Controls hinzufügen

```powershell
$button = New-Object System.Windows.Forms.Button
$button.Text = "Klick mich"

$tabPage1.Controls.Add($button)

```

Wichtig:  
Controls werden **immer direkt zur TabPage hinzugefügt**, nicht zum TabControl.

---

### Tab wechseln (programmatisch)

```powershell
$tabControl.SelectedTab = $tabPage2

```

oder

```powershell
$tabControl.SelectedIndex = 1

```

---

### Events

`TabPage` selbst hat keine super-spezifischen Events wie das `TabControl`.  
Sie verhält sich eher wie ein normales `Panel`.

Trotzdem gibt es ein paar relevante:

- **Enter**  
    Wird ausgelöst, wenn die TabPage aktiv wird (Tab wird ausgewählt)
- **Leave**  
    Wird ausgelöst, wenn die TabPage verlassen wird
- **Click**  
    Klick irgendwo auf der TabPage (nicht super hilfreich in der Praxis)
- **ControlAdded / ControlRemoved**  
    Wenn Controls dynamisch hinzugefügt oder entfernt werden
- **Paint**  
    Wenn die TabPage neu gezeichnet wird (Custom Drawing, eher selten)

---

### Wichtig: Tab-Wechsel-Events liegen am TabControl

Wenn du wirklich auf Tab-Wechsel reagieren willst, bist du hier falsch unterwegs:

- `SelectedIndexChanged`
- `Selecting`
- `Selected`

Die gehören zum **TabControl**, nicht zur TabPage.

Das ist einer dieser klassischen Momente, wo WinForms dich still verarscht.

---

### Typische Stolperfallen

- **Controls erscheinen nicht**  
    → falscher Parent (nicht der TabPage hinzugefügt)
- **Layout wirkt kaputt**  
    → falsches `Dock` / `Anchor` innerhalb der TabPage
- **Events feuern nicht wie erwartet**  
    → falsches Objekt (TabPage vs. TabControl verwechselt)

---

### Mentales Modell

Denk nicht in "Tabs".  
Denk in **Panels mit Umschalter**.

Jede `TabPage` ist einfach ein eigenes Panel.  
Das `TabControl` entscheidet nur, welches sichtbar ist.

---

### Wann sinnvoll?

- Einstellungen gruppieren
- Inhalte strukturieren
- Platz sparen

---

### Wann vermeiden?

- Wenn Nutzer ständig wechseln müssen
- Wenn Inhalte stark zusammenhängen

---