# Button

Ein `Button` ist ein Steuerelement, mit dem der Benutzer **Aktionen auslösen** kann.

Im Gegensatz zu Controls wie `TextBox`, `ListBox` oder `CheckedListBox` speichert ein `Button` keine Daten. Er dient ausschließlich dazu, eine Aktion auszuführen, beispielsweise das Speichern einer Datei, das Öffnen eines Dialogs oder das Starten einer Berechnung.

---

## **Grundlagen**

Ein `Button` löst **eine Aktion** aus.

- `Button` → führt eine Aktion aus
- `<a href="https://doku.borinas.com/books/klassenwindowsforms/page/label" title="Label">Label</a>` → zeigt Informationen an
- `TextBox` → ermöglicht Texteingaben

#### Button erstellen

```powershell
# Klassisch
$button = New-Object System.Windows.Forms.Button

# .NET-Style
$button = [System.Windows.Forms.Button]::new()
```

#### Button hinzufügen

Ein `Button` wird wie jedes andere Control der `Controls`-Collection seines Parent-Containers hinzugefügt.

```powershell
$form.Controls.Add($button)

# oder

$tabPage.Controls.Add($button)
```

#### Click-Event hinzufügen

Die häufigste Aufgabe eines Buttons besteht darin, auf einen Mausklick zu reagieren.

```powershell
$button.Add_Click({
    param($sender, $e)

    Write-Host "Button wurde geklickt."
})
```

---

# **Eigenschaften**

<table id="bkmrk-eigenschaft-beschrei"><thead><tr><th>Eigenschaft</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`AutoSize`</td><td>Passt die Größe des Buttons automatisch an dessen Inhalt an.</td></tr><tr><td>`AutoEllipsis`</td><td>Kürzt zu langen Text automatisch mit `...`.</td></tr><tr><td>`BackColor`</td><td>Legt die Hintergrundfarbe des Buttons fest.</td></tr><tr><td>`DialogResult`</td><td>Gibt den Rückgabewert eines Dialogfensters beim Klick auf den Button an.</td></tr><tr><td>`Dock`</td><td>Dockt den Button an einer Seite seines Parent-Containers an.</td></tr><tr><td>`Enabled`</td><td>Legt fest, ob der Button verwendet werden kann.</td></tr><tr><td>`FlatAppearance`</td><td>Enthält Darstellungseigenschaften für flache Buttons.</td></tr><tr><td>`FlatStyle`</td><td>Bestimmt das Erscheinungsbild des Buttons.</td></tr><tr><td>`Font`</td><td>Legt Schriftart, -größe und -stil fest.</td></tr><tr><td>`ForeColor`</td><td>Legt die Textfarbe fest.</td></tr><tr><td>`Image`</td><td>Zeigt ein Bild auf dem Button an.</td></tr><tr><td>`ImageAlign`</td><td>Bestimmt die Position des Bildes innerhalb des Buttons.</td></tr><tr><td>`ImageIndex`</td><td>Wählt ein Bild anhand seines Indexes aus der `ImageList` aus.</td></tr><tr><td>`ImageKey`</td><td>Wählt ein Bild anhand seines Namens aus der `ImageList` aus.</td></tr><tr><td>`ImageList`</td><td>Legt die Bildersammlung für den Button fest.</td></tr><tr><td>`Location`</td><td>Bestimmt die Position des Buttons im Parent-Container.</td></tr><tr><td>`Margin`</td><td>Legt den äußeren Abstand zu benachbarten Controls fest.</td></tr><tr><td>`MaximumSize`</td><td>Definiert die maximal zulässige Größe.</td></tr><tr><td>`MinimumSize`</td><td>Definiert die minimal zulässige Größe.</td></tr><tr><td>`Name`</td><td>Legt den internen Namen des Buttons fest.</td></tr><tr><td>`Padding`</td><td>Legt den Innenabstand zwischen Rand und Inhalt fest.</td></tr><tr><td>`Size`</td><td>Bestimmt Breite und Höhe des Buttons.</td></tr><tr><td>`TabIndex`</td><td>Legt die Reihenfolge der Tabulator-Navigation fest.</td></tr><tr><td>`TabStop`</td><td>Legt fest, ob der Button per Tabulator fokussiert werden kann.</td></tr><tr><td>`Text`</td><td>Bestimmt die sichtbare Beschriftung des Buttons.</td></tr><tr><td>`TextAlign`</td><td>Legt die Position des Textes fest.</td></tr><tr><td>`TextImageRelation`</td><td>Bestimmt die Anordnung von Bild und Text.</td></tr><tr><td>`UseMnemonic`</td><td>Aktiviert Tastenkombinationen über `&` im Text.</td></tr><tr><td>`UseVisualStyleBackColor`</td><td>Verwendet das Windows-Design für den Hintergrund.</td></tr><tr><td>`Visible`</td><td>Legt fest, ob der Button sichtbar ist.</td></tr></tbody></table>

<details id="bkmrk-autosize-autosize-ty"><summary>AutoSize</summary>

#### **AutoSize**

**Typ** = `[System.Boolean]`

Der Wert von `AutoSize` legt fest, ob sich die Größe des Buttons automatisch an dessen Inhalt anpasst. Standardmäßig besitzt diese Eigenschaft den Wert `False`, wodurch ausschließlich die Eigenschaft `Size` die Größe bestimmt.

Ist `AutoSize` auf `True` gesetzt, wird die Breite und Höhe des Buttons automatisch an den enthaltenen Text beziehungsweise das Bild angepasst.

```powershell
$button.AutoSize = $true
```

</details><details id="bkmrk-autoellipsis-autoell"><summary>AutoEllipsis</summary>

#### **AutoEllipsis**

**Typ** = `[System.Boolean]`

Der Wert von `AutoEllipsis` legt fest, ob zu langer Text automatisch mit `...` gekürzt werden soll, wenn dieser nicht vollständig dargestellt werden kann.

Standardmäßig ist diese Eigenschaft auf `False` gesetzt.

```powershell
$button.AutoEllipsis = $true
```

</details><details id="bkmrk-backcolor-backcolor-"><summary>BackColor</summary>

#### **BackColor**

**Typ** = `[System.Drawing.Color]`

Der Wert von `BackColor` legt die Hintergrundfarbe des Buttons fest.

Standardmäßig wird die Hintergrundfarbe durch das aktuelle Windows-Design bestimmt. Soll eine eigene Hintergrundfarbe verwendet werden, muss zusätzlich `UseVisualStyleBackColor` auf `$false` gesetzt werden.

```powershell
$button.UseVisualStyleBackColor = $false
$button.BackColor = "RoyalBlue"
```

> 💡 **Hinweis**  
> Solange `UseVisualStyleBackColor` aktiviert ist, wird `BackColor` häufig ignoriert.

</details><details id="bkmrk-dialogresult-dialogr"><summary>DialogResult</summary>

#### **DialogResult**

**Typ** = `[System.Windows.Forms.DialogResult]`

Der Wert von `DialogResult` legt fest, welcher Rückgabewert beim Anklicken des Buttons an ein modales Dialogfenster (`ShowDialog()`) zurückgegeben wird.

Standardmäßig besitzt diese Eigenschaft den Wert `None`. Wird beispielsweise `OK`, `Cancel` oder `Yes` festgelegt, schließt sich das Dialogfenster automatisch und `ShowDialog()` liefert den entsprechenden Wert zurück.

Diese Eigenschaft wird hauptsächlich in Dialogfenstern verwendet.

```powershell
$button.DialogResult = "OK"
```

</details><details id="bkmrk-dock-dock-typ-%3D-%5Bsys"><summary>Dock</summary>

#### **Dock**

**Typ** = `[System.Windows.Forms.DockStyle]`

Der Wert von `Dock` legt fest, an welcher Seite seines Parent-Containers der Button angedockt wird. Standardmäßig besitzt diese Eigenschaft den Wert `None`, wodurch Position und Größe ausschließlich über `Location` und `Size` bestimmt werden.

Alternativ kann der Button am oberen (`Top`), unteren (`Bottom`), linken (`Left`) oder rechten (`Right`) Rand angedockt oder mit `Fill` über den gesamten verfügbaren Bereich ausgedehnt werden.

Im Gegensatz zu `Anchor` übernimmt `Dock` sowohl die Positionierung als auch die Größenanpassung des Controls.

```powershell
$button.Dock = "Fill"
```

</details><details id="bkmrk-enabled-enabled-typ-"><summary>Enabled</summary>

#### **Enabled**

**Typ** = `[System.Boolean]`

Der Wert von `Enabled` legt fest, ob der Button vom Benutzer verwendet werden kann.

Standardmäßig besitzt diese Eigenschaft den Wert `True`. Ist sie auf `False` gesetzt, wird der Button ausgegraut dargestellt und reagiert weder auf Maus- noch auf Tastatureingaben.

```powershell
$button.Enabled = $false
```

</details><details id="bkmrk-flatappearance-flata"><summary>FlatAppearance</summary>

#### **FlatAppearance**

**Typ** = `[System.Windows.Forms.FlatButtonAppearance]`

Der Wert von `FlatAppearance` enthält verschiedene Eigenschaften zur Darstellung eines Buttons mit dem `FlatStyle` `Flat` oder `Popup`.

Hierüber können unter anderem die Rahmenfarbe (`BorderColor`), Rahmenstärke (`BorderSize`) sowie die Hintergrundfarben beim Überfahren oder Anklicken angepasst werden.

```powershell
$button.FlatStyle = "Flat"

$button.FlatAppearance.BorderSize = 1
$button.FlatAppearance.BorderColor = "DodgerBlue"
```

> 💡 **Hinweis**  
> Die Eigenschaften von `FlatAppearance` wirken nur bei den Darstellungsarten `Flat` und teilweise `Popup`.

</details><details id="bkmrk-flatstyle-flatstyle-"><summary>FlatStyle</summary>

#### **FlatStyle**

**Typ** = `[System.Windows.Forms.FlatStyle]`

Der Wert von `FlatStyle` bestimmt das Erscheinungsbild des Buttons.

Standardmäßig besitzt diese Eigenschaft den Wert `Standard`. Alternativ stehen `Flat`, `Popup` und `System` zur Verfügung.

- **Standard** → Standarddarstellung
- **Flat** → flacher Button
- **Popup** → flach, hebt sich beim Überfahren hervor
- **System** → Darstellung vollständig durch Windows

```powershell
$button.FlatStyle = "Flat"
```

</details><details id="bkmrk-font-font-typ-%3D-%5Bsys"><summary>Font</summary>

#### **Font**

**Typ** = `[System.Drawing.Font]`

Der Wert von `Font` legt die Schriftart fest, mit der der Text des Buttons dargestellt wird.

Änderungen an dieser Eigenschaft beeinflussen sowohl Schriftart als auch Schriftgröße und Schriftstil.

```powershell
$button.Font = [System.Drawing.Font]::new( "Segoe UI", 10, "Bold" )
```

</details><details id="bkmrk-forecolor-forecolor-"><summary>ForeColor</summary>

#### **ForeColor**

**Typ** = `[System.Drawing.Color]`

Der Wert von `ForeColor` legt die Farbe fest, mit der der Text des Buttons dargestellt wird.

```powershell
$button.ForeColor = "White"
```

</details><details id="bkmrk-image-image-typ-%3D-%5Bs"><summary>Image</summary>

#### **Image**

**Typ** = `[System.Drawing.Image]`

Der Wert von `Image` legt das Bild fest, das auf dem Button angezeigt werden soll.

Standardmäßig besitzt diese Eigenschaft den Wert `$null`, wodurch kein Bild dargestellt wird. Ist sowohl ein Bild als auch ein Text vorhanden, bestimmt `TextImageRelation`, wie beide Elemente zueinander angeordnet werden.

```powershell
$button.Image = [System.Drawing.Image]::FromFile( "C:\Icons\Save.png" )
```

> 💡 **Hinweis**  
> Soll das Bild aus einer `ImageList` stammen, werden stattdessen die Eigenschaften `ImageList` sowie `ImageIndex` oder `ImageKey` verwendet.

</details><details id="bkmrk-imagealign-imagealig"><summary>ImageAlign</summary>

#### **ImageAlign**

**Typ** = `[System.Drawing.ContentAlignment]`

Der Wert von `ImageAlign` legt fest, an welcher Position das Bild innerhalb des Buttons dargestellt wird.

Standardmäßig befindet sich das Bild mittig (`MiddleCenter`). Zusammen mit `TextAlign` und `TextImageRelation` lässt sich die Anordnung von Bild und Text individuell festlegen.

```powershell
$button.ImageAlign = "MiddleLeft"
```

</details><details id="bkmrk-imageindex-imageinde"><summary>ImageIndex</summary>

#### **ImageIndex**

**Typ** = `[System.Int32]`

Der Wert von `ImageIndex` bestimmt den Index des Bildes innerhalb der zugewiesenen `ImageList`.

Standardmäßig besitzt diese Eigenschaft den Wert `-1`, wodurch kein Bild ausgewählt ist.

```powershell
$button.ImageList = $imageList
$button.ImageIndex = 0

```

> 💡 **Hinweis**  
> `ImageIndex` und `ImageKey` dienen demselben Zweck. Es sollte immer nur eine der beiden Eigenschaften verwendet werden.

</details><details id="bkmrk-imagekey-imagekey-ty"><summary>ImageKey</summary>

#### **ImageKey**

**Typ** = `[System.String]`

Der Wert von `ImageKey` legt den Namen eines Bildes innerhalb der zugewiesenen `ImageList` fest.

Im Gegensatz zu `ImageIndex` erfolgt die Auswahl hierbei über den Namen des Bildes.

```powershell
$button.ImageList = $imageList
$button.ImageKey = "Save"
```

</details><details id="bkmrk-imagelist-imagelist-"><summary>ImageList</summary>

#### **ImageList**

**Typ** = `[System.Windows.Forms.ImageList]`

Der Wert von `ImageList` legt die Bildersammlung fest, aus der der Button seine Bilder beziehen kann.

Die Eigenschaft selbst bestimmt noch kein Bild. Welches Bild angezeigt wird, wird anschließend über `ImageIndex` oder `ImageKey` ausgewählt.

```powershell
$button.ImageList = $imageList
$button.ImageIndex = 2
```

</details><details id="bkmrk-location-location-ty"><summary>Location</summary>

#### **Location**

**Typ** = `[System.Drawing.Point]`

Der Wert von `Location` legt die Position des Buttons innerhalb seines Parent-Containers fest.

Die Position wird über die X- und Y-Koordinate relativ zum Parent-Control angegeben.

```powershell
$button.Location = "20, 40"

```

> 💡 **Hinweis**  
> Ist zusätzlich `Dock` aktiviert, wird `Location` vom Layoutsystem automatisch verwaltet.

</details><details id="bkmrk-margin-margin-typ-%3D-"><summary>Margin</summary>

#### **Margin**

**Typ** = `[System.Windows.Forms.Padding]`

Der Wert von `Margin` legt den äußeren Abstand des Buttons zu benachbarten Controls fest.

Die Eigenschaft wird hauptsächlich von Layout-Containern wie `FlowLayoutPanel` oder `TableLayoutPanel` berücksichtigt.

```powershell
$button.Margin = [System.Windows.Forms.Padding]::new(10)

```


</details><details id="bkmrk-maximumsize-maximums"><summary>MaximumSize</summary>

#### **MaximumSize**

**Typ** = `[System.Drawing.Size]`

Der Wert von `MaximumSize` legt die maximal zulässige Größe des Buttons fest.

Standardmäßig besitzt diese Eigenschaft den Wert `(0,0)`. Dadurch existiert keine Größenbegrenzung.

```powershell
$button.MaximumSize = "250, 50"
```

</details><details id="bkmrk-minimumsize-minimums"><summary>MinimumSize</summary>

#### **MinimumSize**

**Typ** = `[System.Drawing.Size]`

Der Wert von `MinimumSize` legt die minimal zulässige Größe des Buttons fest.

Unterschreitet eine Größenänderung diesen Wert, bleibt die festgelegte Mindestgröße erhalten.

```powershell
$button.MinimumSize = "120, 35"
```

</details><details id="bkmrk-name-name-typ-%3D-%5Bsys"><summary>Name</summary>

#### **Name**

**Typ** = `[System.String]`

Der Wert von `Name` legt den internen Namen des Buttons fest.

Der Name dient ausschließlich der Identifikation innerhalb des Programms und wird dem Benutzer nicht angezeigt. Besonders bei größeren Formularen erleichtert ein eindeutiger Name die spätere Verwaltung und den Zugriff auf Controls.

```powershell
$button.Name = "btnSave"
```

</details><details id="bkmrk-padding-padding-typ-"><summary>Padding</summary>

#### **Padding**

**Typ** = `[System.Windows.Forms.Padding]`

Der Wert von `Padding` legt den Innenabstand zwischen dem Rand des Buttons und dessen Inhalt fest.

Dadurch kann zusätzlicher Abstand zwischen Rahmen, Text und Bild geschaffen werden.

```powershell
$button.Padding = [System.Windows.Forms.Padding]::new(8)
```

</details><details id="bkmrk-size-size-typ-%3D-%5Bsys"><summary>Size</summary>

#### **Size**

**Typ** = `[System.Drawing.Size]`

Der Wert von `Size` legt die Breite und Höhe des Buttons fest.

Standardmäßig wird die Größe ausschließlich durch diese Eigenschaft bestimmt. Ist `AutoSize` aktiviert, kann die Größe automatisch anhand des Inhalts berechnet werden.

```powershell
$button.Size = "120, 35"
```

</details><details id="bkmrk-tabindex-tabindex-ty"><summary>TabIndex</summary>

#### **TabIndex**

**Typ** = `[System.Int32]`

Der Wert von `TabIndex` legt die Reihenfolge fest, in der das Control den Fokus erhält, wenn der Benutzer die **Tabulator-Taste** betätigt.

Standardmäßig vergibt der Designer beziehungsweise die Reihenfolge der hinzugefügten Controls fortlaufende Werte. Das Control mit dem kleinsten `TabIndex` erhält den Fokus zuerst.

```powershell
$button.TabIndex = 2
```

> 💡 **Hinweis**  
> Die tatsächliche Tabulator-Reihenfolge ergibt sich aus dem Zusammenspiel von `TabIndex` und `TabStop`.

</details><details id="bkmrk-tabstop-tabstop-typ-"><summary>TabStop</summary>

#### **TabStop**

**Typ** = `[System.Boolean]`

Der Wert von `TabStop` legt fest, ob der Button über die **Tabulator-Taste** den Fokus erhalten kann.

Standardmäßig besitzt diese Eigenschaft den Wert `True`. Wird sie auf `False` gesetzt, überspringt die Tabulator-Navigation den Button, obwohl dieser weiterhin per Mausklick verwendet werden kann.

```powershell
$button.TabStop = $false
```

</details><details id="bkmrk-text-text-typ-%3D-%5Bsys"><summary>Text</summary>

#### **Text**

**Typ** = `[System.String]`

Der Wert von `Text` legt die sichtbare Beschriftung des Buttons fest.

Standardmäßig besitzt diese Eigenschaft den Wert `""` (leerer String). Der Text wird innerhalb des Buttons entsprechend der Eigenschaft `TextAlign` dargestellt.

```powershell
$button.Text = "Speichern"
```

Soll der Button ausschließlich ein Symbol enthalten, kann der Text leer bleiben.

```powershell
$button.Text = ""
```

</details><details id="bkmrk-textalign-textalign-"><summary>TextAlign</summary>

#### **TextAlign**

**Typ** = `[System.Drawing.ContentAlignment]`

Der Wert von `TextAlign` legt fest, an welcher Position der Text innerhalb des Buttons dargestellt wird.

Standardmäßig besitzt diese Eigenschaft den Wert `MiddleCenter`, wodurch der Text zentriert angezeigt wird.

In Kombination mit `ImageAlign` und `TextImageRelation` kann die Position von Text und Bild unabhängig voneinander festgelegt werden.

```powershell
$button.TextAlign = "MiddleRight"
```

</details><details id="bkmrk-textimagerelation-te"><summary>TextImageRelation</summary>

#### **TextImageRelation**

**Typ** = `[System.Windows.Forms.TextImageRelation]`

Der Wert von `TextImageRelation` legt fest, wie Text und Bild innerhalb des Buttons zueinander angeordnet werden.

Diese Eigenschaft besitzt nur dann eine sichtbare Auswirkung, wenn sowohl `Text` als auch `Image` beziehungsweise `ImageList` verwendet werden.

Folgende Werte stehen zur Verfügung:

- **Overlay** → Text und Bild liegen übereinander
- **ImageBeforeText** → Bild links vom Text
- **TextBeforeImage** → Text links vom Bild
- **ImageAboveText** → Bild oberhalb des Textes
- **TextAboveImage** → Text oberhalb des Bildes

```powershell
$button.Image = $image
$button.Text = "Speichern"

$button.TextImageRelation = "ImageBeforeText"
```

> 💡 **Hinweis**  
> Die genaue Position wird zusätzlich durch `ImageAlign` und `TextAlign` beeinflusst.

</details><details id="bkmrk-usemnemonic-usemnemo"><summary>UseMnemonic</summary>

#### **UseMnemonic**

**Typ** = `[System.Boolean]`

Der Wert von `UseMnemonic` legt fest, ob im Text enthaltene Mnemonics ausgewertet werden.

Standardmäßig besitzt diese Eigenschaft den Wert `True`.

Ein kaufmännisches Und (`&`) kennzeichnet den folgenden Buchstaben als Tastenkombination. Dieser Buchstabe wird unterstrichen und kann zusammen mit der **Alt-Taste** verwendet werden.

```powershell
$button.Text = "&Speichern"
```

Im Beispiel kann der Button mit **Alt + S** aktiviert werden.

Soll das Zeichen `&` hingegen als normales Zeichen dargestellt werden, muss es doppelt angegeben werden.

```powershell
$button.Text = "Speichern && Schließen"
```

</details><details id="bkmrk-usevisualstylebackco"><summary>UseVisualStyleBackColor</summary>

#### **UseVisualStyleBackColor**

**Typ** = `[System.Boolean]`

Der Wert von `UseVisualStyleBackColor` legt fest, ob der Button seine Hintergrundfarbe vom aktuellen Windows-Design übernimmt.

Standardmäßig besitzt diese Eigenschaft den Wert `True`. Dadurch bestimmt Windows die Darstellung des Buttons, wodurch eine einheitliche Optik mit dem Betriebssystem erreicht wird.

Soll eine eigene Hintergrundfarbe über `BackColor` verwendet werden, muss `UseVisualStyleBackColor` auf `$false` gesetzt werden.

```powershell
$button.UseVisualStyleBackColor = $false
$button.BackColor = "RoyalBlue"
```

> 💡 **Hinweis**  
> Solange `UseVisualStyleBackColor` aktiviert ist, wird `BackColor` häufig vollständig ignoriert.

</details><details id="bkmrk-visible-visible-typ-"><summary>Visible</summary>

#### **Visible**

**Typ** = `[System.Boolean]`

Der Wert von `Visible` legt fest, ob der Button sichtbar dargestellt wird.

Standardmäßig besitzt diese Eigenschaft den Wert `True`. Wird sie auf `False` gesetzt, wird der Button nicht angezeigt und kann weder per Maus noch per Tastatur verwendet werden.

```powershell
$button.Visible = $false
```

Die Eigenschaft eignet sich insbesondere, um Bedienelemente abhängig vom Programmzustand ein- oder auszublenden.

```powershell
$button.Visible = $userIsAdmin
```

</details>---

## **Methoden**


<table id="bkmrk-methode-beschreibung"><thead><tr><th>Methode</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`PerformClick()`</td><td>Löst das `Click`-Event programmgesteuert aus.</td></tr><tr><td>`Select()`</td><td>Versucht, den Button auszuwählen.</td></tr><tr><td>`Focus()`</td><td>Versucht, den Tastaturfokus auf den Button zu setzen.</td></tr><tr><td>`BringToFront()`</td><td>Bringt den Button innerhalb seines Parent-Containers in die vorderste Ebene.</td></tr><tr><td>`SendToBack()`</td><td>Verschiebt den Button innerhalb seines Parent-Containers in die hinterste Ebene.</td></tr></tbody></table>

<details id="bkmrk-performclick%28%29-perfo"><summary>PerformClick()</summary>

#### **PerformClick()**

```powershell
$button.PerformClick()
```

---

**Beschreibung**

Die Methode `PerformClick()` löst programmgesteuert einen Klick auf den Button aus.   
Dabei wird das `Click`-Event genauso ausgelöst, als hätte der Benutzer den Button mit der Maus angeklickt. Dadurch kann dieselbe Programmlogik sowohl durch Benutzereingaben als auch durch Code ausgeführt werden.   
Die Methode führt den Klick nur aus, wenn der Button aktiviert (`Enabled = $true`) und sichtbar (`Visible = $true`) ist.

---

**Rückgabe**

Keine Rückgabe `System.Void`

---

**Beispiel**

```powershell
$button.Add_Click({
    Write-Host "Button wurde geklickt."
})

# Klick per Code auslösen
$button.PerformClick()
```

</details><details id="bkmrk-select%28%29-select%28%29-%24b"><summary>Select()</summary>

#### **Select()**

```powershell
$button.Select()
```

---

**Beschreibung**

Die Methode `Select()` versucht, den Eingabefokus auf den Button zu setzen.   
Der Button erhält den Fokus jedoch nur, wenn er aktiviert (`Enabled = $true`), sichtbar (`Visible = $true`) und innerhalb seines Parent-Containers auswählbar ist.   
Nach erfolgreichem Aufruf kann der Button beispielsweise direkt über die Leertaste oder Eingabetaste ausgelöst werden.

---

**Rückgabe**

Keine Rückgabe `System.Void`

---

**Beispiel**

```powershell
$button.Select()
```

</details><details id="bkmrk-focus%28%29-focus%28%29-%24but"><summary>Focus()</summary>

#### **Focus()**

```powershell
$button.Focus()
```

---

**Beschreibung**

Die Methode `Focus()` versucht, den Tastaturfokus auf den Button zu setzen.   
Im Gegensatz zu `Select()` liefert die Methode einen Rückgabewert, anhand dessen überprüft werden kann, ob das Setzen des Fokus erfolgreich war.   
Die Methode schlägt beispielsweise fehl, wenn der Button deaktiviert oder nicht sichtbar ist.

---

**Rückgabe**

Gibt `True` zurück, wenn der Fokus erfolgreich gesetzt werden konnte, andernfalls `False`.

Rückgabetyp: `System.Boolean`

---

**Beispiel**

```powershell
if ($button.Focus()) {
    Write-Host "Button besitzt jetzt den Fokus."
}
else {
    Write-Host "Fokus konnte nicht gesetzt werden."
}
```

</details><details id="bkmrk-bringtofront%28%29-bring"><summary>BringToFront()</summary>

#### **BringToFront()**

```powershell
$button.BringToFront()
```

---

**Beschreibung**Die Methode `BringToFront()` bringt den Button innerhalb seines Parent-Containers in die vorderste Ebene der Z-Reihenfolge.

Dies ist insbesondere relevant, wenn sich mehrere Controls überlappen. Der Button wird dadurch vor anderen Controls desselben Parent-Containers dargestellt.

Die Methode verändert weder die Position (`Location`) noch die Größe (`Size`) des Buttons.

---

**Rückgabe**Keine Rückgabe `System.Void`

---

**Beispiel**```powershell
$button.BringToFront()
```

</details><details id="bkmrk-sendtoback%28%29-sendtob"><summary>SendToBack()</summary>

#### **SendToBack()**

```powershell
$button.SendToBack()
```

---

 **Beschreibung**

Die Methode `SendToBack()` verschiebt den Button innerhalb seines Parent-Containers in die hinterste Ebene der Z-Reihenfolge.

Dies ist insbesondere relevant, wenn sich mehrere Controls überlappen. Der Button wird dadurch hinter anderen Controls desselben Parent-Containers dargestellt.

Die Methode verändert weder die Position (`Location`) noch die Größe (`Size`) des Buttons.

---

**Rückgabe**Keine Rückgabe `System.Void`

---

**Beispiel**```powershell
$button.SendToBack()
```

</details>---

## **Events**

<table id="bkmrk-event-beschreibung-c"><thead><tr><th>Event</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`Click`</td><td>Wird ausgelöst, wenn der Button angeklickt wird.</td></tr><tr><td>`DoubleClick`</td><td>Wird bei einem Doppelklick ausgelöst.</td></tr><tr><td>`MouseClick`</td><td>Reagiert auf einen Mausklick und liefert Informationen über die Maustaste.</td></tr><tr><td>`MouseDown`</td><td>Wird beim Drücken einer Maustaste ausgelöst.</td></tr><tr><td>`MouseUp`</td><td>Wird beim Loslassen einer Maustaste ausgelöst.</td></tr><tr><td>`MouseEnter`</td><td>Wird ausgelöst, wenn der Mauszeiger den Button betritt.</td></tr><tr><td>`MouseLeave`</td><td>Wird ausgelöst, wenn der Mauszeiger den Button verlässt.</td></tr><tr><td>`MouseMove`</td><td>Wird während der Mausbewegung über dem Button ausgelöst.</td></tr><tr><td>`GotFocus`</td><td>Wird ausgelöst, wenn der Button den Tastaturfokus erhält.</td></tr><tr><td>`LostFocus`</td><td>Wird ausgelöst, wenn der Button den Tastaturfokus verliert.</td></tr><tr><td>`KeyDown`</td><td>Wird beim Drücken einer Taste ausgelöst.</td></tr><tr><td>`KeyPress`</td><td>Wird ausgelöst, wenn ein druckbares Zeichen eingegeben wird.</td></tr><tr><td>`KeyUp`</td><td>Wird beim Loslassen einer Taste ausgelöst.</td></tr></tbody></table>

<details id="bkmrk-click-click-das-clic"><summary>Click</summary>

#### **Click**

Das `Click`-Event wird ausgelöst, wenn der Benutzer den Button anklickt oder dieser programmgesteuert über `PerformClick()` ausgelöst wird.

Dies ist das am häufigsten verwendete Event eines Buttons und dient üblicherweise zum Ausführen einer Aktion.

---

**Beispiel**

```powershell
$button.Add_Click({
    Write-Host "Speichern..."
})
```

</details><details id="bkmrk-doubleclick-doublecl"><summary>DoubleClick</summary>

#### **DoubleClick**

Das `DoubleClick`-Event wird ausgelöst, wenn der Benutzer den Button doppelt anklickt.

Da Buttons normalerweise bereits auf den ersten Klick reagieren, wird dieses Event nur selten verwendet.

---

**Beispiel**

```powershell
$button.Add_DoubleClick({
    Write-Host "Doppelklick"
})
```

</details><details id="bkmrk-mouseclick-mouseclic"><summary>MouseClick</summary>

#### **MouseClick**

Das `MouseClick`-Event wird ausgelöst, wenn der Benutzer den Button mit einer Maustaste anklickt.

Im Gegensatz zum `Click`-Event stehen zusätzliche Informationen zur verwendeten Maustaste sowie zur Mausposition zur Verfügung.

---

<div class="group TyagGW_tableContainer"><div class="TyagGW_tableWrapper flex flex-col-reverse w-fit" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="974" data-start="361" style="width: 100%;"><thead data-end="397" data-start="361"><tr data-end="397" data-start="361"><th class="last:pe-10" data-col-size="sm" data-end="375" data-start="361" style="width: 11.8648%;">Eigenschaft</th><th class="last:pe-10" data-col-size="sm" data-end="381" data-start="375" style="width: 14.0932%;">Typ</th><th class="last:pe-10" data-col-size="md" data-end="397" data-start="381" style="width: 74.042%;">Beschreibung</th></tr></thead><tbody data-end="974" data-start="435"><tr data-end="560" data-start="435"><td data-col-size="sm" data-end="446" data-start="435" style="width: 11.8648%;">`Button`</td><td data-col-size="sm" data-end="463" data-start="446" style="width: 14.0932%;">`MouseButtons`</td><td data-col-size="md" data-end="560" data-start="463" style="width: 74.042%;">Gibt an, welche Maustaste gedrückt wurde (`Left`, `Right`, `Middle`, `XButton1`, `XButton2`).</td></tr><tr data-end="629" data-start="561"><td data-col-size="sm" data-end="572" data-start="561" style="width: 11.8648%;">`Clicks`</td><td data-col-size="sm" data-end="582" data-start="572" style="width: 14.0932%;">`Int32`</td><td data-col-size="md" data-end="629" data-start="582" style="width: 74.042%;">Anzahl der aufeinanderfolgenden Mausklicks.</td></tr><tr data-end="698" data-start="630"><td data-col-size="sm" data-end="636" data-start="630" style="width: 11.8648%;">`X`</td><td data-col-size="sm" data-end="646" data-start="636" style="width: 14.0932%;">`Int32`</td><td data-col-size="md" data-end="698" data-start="646" style="width: 74.042%;">X-Koordinate des Mauszeigers relativ zum Button.</td></tr><tr data-end="767" data-start="699"><td data-col-size="sm" data-end="705" data-start="699" style="width: 11.8648%;">`Y`</td><td data-col-size="sm" data-end="715" data-start="705" style="width: 14.0932%;">`Int32`</td><td data-col-size="md" data-end="767" data-start="715" style="width: 74.042%;">Y-Koordinate des Mauszeigers relativ zum Button.</td></tr><tr data-end="850" data-start="768"><td data-col-size="sm" data-end="781" data-start="768" style="width: 11.8648%;">`Location`</td><td data-col-size="sm" data-end="791" data-start="781" style="width: 14.0932%;">`Point`</td><td data-col-size="md" data-end="850" data-start="791" style="width: 74.042%;">Mausposition als `Point` (`X` und `Y` zusammengefasst).</td></tr><tr data-end="974" data-start="851"><td data-col-size="sm" data-end="861" data-start="851" style="width: 11.8648%;">`Delta`</td><td data-col-size="sm" data-end="871" data-start="861" style="width: 14.0932%;">`Int32`</td><td data-col-size="md" data-end="974" data-start="871" style="width: 74.042%;">Wert des Mausrads. Beim `MouseClick` normalerweise `0`. Relevant vor allem beim `MouseWheel`-Event.</td></tr></tbody></table>

</div></div>### Beispiel

```powershell
$button.Add_MouseClick({
    param($sender, $e)

    Write-Host "Taste    : $($e.Button)"
    Write-Host "Klicks   : $($e.Clicks)"
    Write-Host "X        : $($e.X)"
    Write-Host "Y        : $($e.Y)"
    Write-Host "Position : $($e.Location)"
})
```

### Ausgabe

```powershell
Taste    : Left
Klicks   : 1
X        : 84
Y        : 17
Position : {X=84,Y=17}
```

---

```powershell
$button.Add_MouseClick({
    param($sender, $e)

    Write-Host $e.Button
})
```

</details><details id="bkmrk-mousedown-mousedown-"><summary>MouseDown</summary>

#### **MouseDown**

Das `MouseDown`-Event wird ausgelöst, sobald der Benutzer eine Maustaste auf dem Button drückt.

Dieses Event eignet sich beispielsweise zum Starten von Drag-and-Drop-Operationen oder zum Erfassen der gedrückten Maustaste.

---

**Beispiel**

```powershell
$button.Add_MouseDown({
    param($sender, $e)

    Write-Host "Taste gedrückt."
})
```

</details><details id="bkmrk-mouseup-mouseup-das-"><summary>MouseUp</summary>

#### **MouseUp**

Das `MouseUp`-Event wird ausgelöst, sobald eine gedrückte Maustaste wieder losgelassen wird.

---

**Beispiel**

```powershell
$button.Add_MouseUp({
    Write-Host "Taste losgelassen."
})
```

</details><details id="bkmrk-mouseenter-mouseente"><summary>MouseEnter</summary>

#### **MouseEnter**

Das `MouseEnter`-Event wird ausgelöst, wenn sich der Mauszeiger erstmals über dem Button befindet.

Es wird häufig verwendet, um beispielsweise Informationen einzublenden oder das Aussehen eines Controls zu verändern.

---

**Beispiel**

```powershell
$button.Add_MouseEnter({
    $button.BackColor = "LightBlue"
})
```

</details><details id="bkmrk-mouseleave-mouseleav"><summary>MouseLeave</summary>

#### **MouseLeave**

Das `MouseLeave`-Event wird ausgelöst, wenn der Mauszeiger den Button wieder verlässt.

---

**Beispiel**

```powershell
$button.Add_MouseLeave({
    $button.BackColor = "White"
})
```

</details><details id="bkmrk-mousemove-mousemove-"><summary>MouseMove</summary>

#### **MouseMove**

Das `MouseMove`-Event wird fortlaufend ausgelöst, während sich der Mauszeiger innerhalb des Buttons bewegt.

Über die Ereignisparameter können die aktuellen Mauskoordinaten abgefragt werden.

---

**Beispiel**

```powershell
$button.Add_MouseMove({
    param($sender, $e)

    Write-Host "$($e.X), $($e.Y)"
})
```

</details><details id="bkmrk-gotfocus-gotfocus-da"><summary>GotFocus</summary>

#### **GotFocus**

Das `GotFocus`-Event wird ausgelöst, sobald der Button den Tastaturfokus erhält.

---

**Beispiel**

```powershell
$button.Add_GotFocus({
    Write-Host "Button besitzt den Fokus."
})
```

</details><details id="bkmrk-lostfocus-lostfocus-"><summary>LostFocus</summary>

#### **LostFocus**

Das `LostFocus`-Event wird ausgelöst, wenn der Button den Tastaturfokus verliert.

---

**Beispiel**

```powershell
$button.Add_LostFocus({
    Write-Host "Fokus verloren."
})
```

</details><details id="bkmrk-keydown-keydown-das-"><summary>KeyDown</summary>

#### **KeyDown**

Das `KeyDown`-Event wird ausgelöst, sobald eine Taste gedrückt wird, während der Button den Fokus besitzt.

---

**Beispiel**

```powershell
$button.Add_KeyDown({
    param($sender, $e)

    if ($e.KeyCode -eq "Enter") {
        Write-Host "Enter"
    }
})
```

</details><details id="bkmrk-keypress-keypress-da"><summary>KeyPress</summary>

#### **KeyPress**

Das `KeyPress`-Event wird ausgelöst, wenn ein druckbares Zeichen eingegeben wird.

Es eignet sich insbesondere zur Verarbeitung einzelner Zeichen.

---

**Beispiel**

```powershell
$button.Add_KeyPress({
    param($sender, $e)

    Write-Host $e.KeyChar
})
```

</details><details id="bkmrk-keyup-keyup-das-keyu"><summary>KeyUp</summary>

#### **KeyUp**

Das `KeyUp`-Event wird ausgelöst, sobald eine gedrückte Taste wieder losgelassen wird.

---

**Beispiel**

```powershell
$button.Add_KeyUp({
    Write-Host "Taste losgelassen."
})
```

</details>---

## **Tipps &amp; Tricks**

#### Standard-Button eines Dialogs festlegen

Über die Eigenschaft `AcceptButton` eines Formulars kann festgelegt werden, welcher Button beim Drücken der **Eingabetaste** automatisch ausgelöst wird.

```powershell
$form.AcceptButton = $button
```

#### Abbrechen-Button festlegen

Über die Eigenschaft `CancelButton` kann ein Button festgelegt werden, der beim Drücken der **Esc-Taste** ausgelöst wird.

```powershell
$form.CancelButton = $cancelButton

```

#### Eigenes Icon links neben dem Text anzeigen

```powershell
$button.Image = [System.Drawing.Image]::FromFile("Save.png")
$button.ImageAlign = "MiddleLeft"
$button.TextImageRelation = "ImageBeforeText"
$button.Text = "Speichern"
```

#### Button farbig darstellen

Damit `BackColor` verwendet wird, muss die Windows-Designfarbe deaktiviert werden.

```powershell
$button.UseVisualStyleBackColor = $false
$button.BackColor = "RoyalBlue"
$button.ForeColor = "White"

```