# GroupBox

Eine `<a href="https://doku.borinas.com/books/klassenwindowsforms/page/groupbox" title="GroupBox">GroupBox</a>` ist ein Container zur visuellen Gruppierung von Controls.  
Sie dient hauptsächlich dazu, zusammengehörige Eingabefelder, Optionen oder Steuerelemente optisch voneinander abzugrenzen.

Der Text der `GroupBox` wird als Überschrift im Rahmen dargestellt

---

## **Grundlagen**

Das `GroupBox` selbst enthält keine besondere Logik.

- `GroupBox` → Container mit Beschriftung
- enthaltene Controls → eigentlicher Inhalt

#### **GroupBox erstellen**

```powershell
# Klassisch
$groupBox = New-Object System.Windows.Forms.GroupBox

# .NET-Style
$groupBox = [System.Windows.Forms.GroupBox]::new()

```

#### **Controls hinzufügen**

Controls werden über die `Controls`-Collection hinzugefügt.

```powershell
$groupBox.Controls.Add($textBox)

$groupBox.Controls.AddRange(@(
    $label,
    $button
))

```

#### **Controls entfernen**

```powershell
$groupBox.Controls.Remove($textBox)

$groupBox.Controls.Clear()

```

---

## **Eigenschaften**

<table border="1" id="bkmrk-eigenschaft-beschrei" style="border-collapse: collapse; width: 58.0952%; height: 298px;"><colgroup><col style="width: 20.5293%;"></col><col style="width: 79.4708%;"></col></colgroup><thead><tr style="height: 29.8px;"><td style="height: 29.8px;">**Eigenschaft**</td><td style="height: 29.8px;">**Beschreibung**</td></tr></thead><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;">**Anchor**</td><td style="height: 29.8px;">Verankerung an den Rändern des Parent-Containers</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">**AutoSize**</td><td style="height: 29.8px;">Größe automatisch an Inhalt anpassen</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">**Controls**</td><td style="height: 29.8px;">Enthaltene Controls</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">**Dock**</td><td style="height: 29.8px;">Automatische Ausrichtung im Parent-Container</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">**Enabled**</td><td style="height: 29.8px;">Aktiviert oder deaktiviert enthaltene Controls</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">**Font**</td><td style="height: 29.8px;">Schriftart der Überschrift</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">**ForeColor**</td><td style="height: 29.8px;">Farbe der Überschrift</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">**Padding**</td><td style="height: 29.8px;">Innenabstand für enthaltene Controls</td></tr><tr style="height: 29.8px;"><td style="height: 29.8px;">**Text**</td><td style="height: 29.8px;">Überschrift der GroupBox</td></tr><tr><td>**Visible**</td><td>Sichtbarkeit der GroupBox</td></tr></tbody></table>

<details id="bkmrk-controls-controls%C2%A0%5Bs"><summary>Controls</summary>

#### **Controls** \[System.Windows.Forms.Control.ControlCollection\]

Enthält alle Controls, die sich innerhalb der GroupBox befinden.

```powershell
$groupBox.Controls.Add($button)

```


</details><details id="bkmrk-enabled-enabled%C2%A0%5Bsys"><summary>Enabled</summary>

#### **Enabled** \[System.Boolean\]

Legt fest, ob die GroupBox aktiviert ist.

Wird `Enabled` auf `$false` gesetzt, werden auch alle enthaltenen Controls deaktiviert.

```powershell
$groupBox.Enabled = $false

```


</details><details id="bkmrk-padding-padding%C2%A0%5Bsys"><summary>Padding</summary>

#### **Padding** \[System.Windows.Forms.Padding\]

Legt den Innenabstand fest, der zwischen Rahmen und enthaltenen Controls eingehalten wird.

```powershell
$groupBox.Padding = 10

```

---


</details><details id="bkmrk-text-text-%5Bsystem.st"><summary>Text</summary>

#### **Text** \[System.String\]

Der Wert von `Text` bestimmt die Beschriftung der GroupBox.

Standardmäßig ist der Wert leer.

```powershell
$groupBox.Text = "Office Installation"

```


</details>---

# **Methoden**

| Methode  | Beschreibung
| :------: | -
| Add      | Fügt ein Control hinzu
| AddRange | Fügt mehrere Controls hinzu
| Remove   | Entfernt ein Control
| Clear    | Entfernt alle Controls

---

### Add()

```powershell
$_.Controls.Add($control)
```

Die Methode `Add()` fügt ein Control zur `Controls`-Collection der GroupBox hinzu.

---

### AddRange()

```powershell
$_.Controls.AddRange( @($label, $textbox, $button) )
```

Die Methode `AddRange()` fügt mehrere Controls gleichzeitig zur `Controls`-Collection hinzu.

---

### Remove()

```powershell
$_.Controls.Remove($control)
```

Die Methode `Remove()` entfernt ein bestimmtes Control aus der GroupBox.

---

### Clear()

```powershell
$_.Controls.Clear()
```

Die Methode `Clear()` entfernt alle enthaltenen Controls.

---

# **Events**

| Event          | Beschreibung
| :------------: | -
| Click          | Mausklick auf die GroupBox
| DoubleClick    | Doppelklick auf die GroupBox
| MouseDown      | Maustaste wurde gedrückt
| MouseUp        | Maustaste wurde losgelassen
| MouseMove      | Maus wurde bewegt
| MouseEnter     | Mauszeiger betritt die GroupBox
| MouseLeave     | Mauszeiger verlässt die GroupBox
| Enter          | Fokus betritt die GroupBox
| Leave          | Fokus verlässt die GroupBox
| ControlAdded   | Ein Control wurde hinzugefügt
| ControlRemoved | Ein Control wurde entfernt
| Resize         | Größe wurde geändert
| Paint          | GroupBox wird neu gezeichnet


```powershell
$groupBox.Add_*({
    param($sender, $e)
})
```

- `$sender` → Die GroupBox selbst (`$this`)
- `$e` → EventArgs des jeweiligen Events

---

### ControlAdded / ControlRemoved

Werden ausgelöst, wenn Controls zur `Controls`-Collection hinzugefügt oder daraus entfernt werden.

```powershell
$groupBox.Add_ControlAdded({
    param($sender, $e)

    Write-Host "$($e.Control.Name) wurde hinzugefügt"
})

```

---

## **Tipps &amp; Tricks**

### Typische Stolperfallen

- **Controls erscheinen nicht**
    
    
    - Position liegt außerhalb der GroupBox
- **Alle Controls werden deaktiviert**
    
    
    - `GroupBox.Enabled = $false`
- **Padding erzeugt kein automatisches Layout**
    
    
    - Controls müssen weiterhin selbst positioniert werden
- **GroupBox für Layout verwendet**
    
    
    - Für komplexe Layouts meist besser: `Panel`, `FlowLayoutPanel` oder `TableLayoutPanel`

---

## Mentales Modell

Die `GroupBox` ist ein **Container mit Beschriftung**.

Sie gruppiert Controls optisch und logisch, besitzt jedoch keine eigene Inhaltslogik.

---

## Wann sinnvoll?

- Einstellungen gruppieren
- Formulare strukturieren
- Optionen zusammenfassen
- RadioButtons logisch gruppieren

---

## Wann vermeiden?

- Komplexe Layouts
- Scrollbare Bereiche
- Dynamische Containerlogik
- Wenn lediglich ein Rahmen benötigt wird