# Label

Ein `Label` ist ein Steuerelement zur **Anzeige von Text und optionalen Bildern**.

Im Gegensatz zu interaktiven Controls wie `Button` oder `TextBox` dient ein `Label` hauptsächlich dazu, Informationen, Beschriftungen oder Hinweise innerhalb einer Benutzeroberfläche darzustellen.

Ein `Label` kann jedoch auch auf Mausereignisse reagieren und beispielsweise über das `Click`-Event als anklickbares Element verwendet werden.

---

# Grundlagen

Ein `Label` wird hauptsächlich verwendet, um Informationen innerhalb eines Formulars darzustellen.

- `Label` → zeigt Informationen oder Beschriftungen an
- `Button` → führt eine Aktion aus
- `TextBox` → ermöglicht Texteingaben

---

#### Label erstellen

```powershell
# Klassisch
$label = New-Object System.Windows.Forms.Label

# .NET-Style
$label = [System.Windows.Forms.Label]::new()

```

---

#### Label hinzufügen

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

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

# oder

$tabPage.Controls.Add($label)

```

---

#### Text festlegen

Der sichtbare Inhalt eines Labels wird über die Eigenschaft `Text` festgelegt.

```powershell
$label.Text = "Benutzername:"

```

---

# Eigenschaften

<table id="bkmrk-eigenschaft-beschrei"><thead><tr><th>Eigenschaft</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`AutoEllipsis`</td><td>Zeigt bei nicht vollständig darstellbarem Text automatisch `...` an.</td></tr><tr><td>`AutoSize`</td><td>Passt die Größe des Labels automatisch an dessen Inhalt an.</td></tr><tr><td>`BackColor`</td><td>Legt die Hintergrundfarbe des Labels fest.</td></tr><tr><td>`BorderStyle`</td><td>Bestimmt, ob und wie ein Rahmen um das Label dargestellt wird.</td></tr><tr><td>`Cursor`</td><td>Legt den Mauszeiger fest, wenn sich der Mauszeiger über dem Label befindet.</td></tr><tr><td>`Dock`</td><td>Dockt das Label an einer Seite seines Parent-Containers an.</td></tr><tr><td>`Enabled`</td><td>Legt fest, ob das Label aktiviert dargestellt wird und auf Eingaben reagieren kann.</td></tr><tr><td>`FlatStyle`</td><td>Bestimmt die Darstellungsart des Labels.</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 im Label an.</td></tr><tr><td>`ImageAlign`</td><td>Bestimmt die Position des Bildes innerhalb des Labels.</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 das Label fest.</td></tr><tr><td>`Location`</td><td>Bestimmt die Position des Labels 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 Labels 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 Labels.</td></tr><tr><td>`TabIndex`</td><td>Legt die Reihenfolge der Tabulator-Navigation fest.</td></tr><tr><td>`TabStop`</td><td>Legt fest, ob das Label per Tabulator fokussiert werden kann.</td></tr><tr><td>`Text`</td><td>Bestimmt den sichtbaren Text des Labels.</td></tr><tr><td>`TextAlign`</td><td>Legt die Position des Textes innerhalb des Labels fest.</td></tr><tr><td>`UseCompatibleTextRendering`</td><td>Bestimmt, ob für die Textdarstellung die ältere GDI+- oder die neuere GDI-Textdarstellung verwendet wird.</td></tr><tr><td>`UseMnemonic`</td><td>Aktiviert Tastenkombinationen über `&` im Text.</td></tr><tr><td>`Visible`</td><td>Legt fest, ob das Label sichtbar ist.</td></tr></tbody></table>

---

<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
$label.AutoEllipsis = $true

```

> 💡 **Hinweis** `AutoEllipsis` ist insbesondere dann sinnvoll, wenn die Größe des Labels begrenzt ist und der vollständige Text nicht angezeigt werden kann.

</details><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 Labels automatisch an dessen Inhalt anpasst.

Beim `Label` ist `AutoSize` standardmäßig auf `True` gesetzt.

Dadurch wird die Größe automatisch anhand des enthaltenen Textes beziehungsweise Bildes bestimmt.

```powershell
$label.AutoSize = $true

```

Soll das Label eine feste Größe besitzen, kann `AutoSize` deaktiviert werden.

```powershell
$label.AutoSize = $false
$label.Size = "200, 40"

```

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

#### **BackColor**

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

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

```powershell
$label.BackColor = "LightBlue"

```

Standardmäßig übernimmt das Label die Hintergrundfarbe seines Parent-Controls beziehungsweise die von Windows vorgegebene Standardfarbe.

</details><details id="bkmrk-borderstyle-borderst"><summary>BorderStyle</summary>

#### **BorderStyle**

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

Der Wert von `BorderStyle` bestimmt, ob und wie ein Rahmen um das Label dargestellt wird.

Folgende Werte stehen zur Verfügung:

- **None** → kein Rahmen
- **FixedSingle** → einfacher Rahmen
- **Fixed3D** → dreidimensionaler Rahmen

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

```powershell
$label.BorderStyle = "FixedSingle"

```

</details><details id="bkmrk-cursor-cursor-typ-%3D-"><summary>Cursor</summary>

#### **Cursor**

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

Der Wert von `Cursor` legt fest, welcher Mauszeiger angezeigt wird, wenn sich der Mauszeiger über dem Label befindet.

```powershell
$label.Cursor = [System.Windows.Forms.Cursors]::Hand

```

Dies kann beispielsweise verwendet werden, wenn das Label wie ein anklickbarer Link verwendet wird.

</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 das Label angedockt wird.

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

```powershell
$label.Dock = "Top"

```

Alternativ kann das Label mit `Fill` den gesamten verfügbaren Bereich einnehmen.

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

```

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

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

#### **Enabled**

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

Der Wert von `Enabled` legt fest, ob das Label aktiviert ist.

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

Wird `Enabled` auf `False` gesetzt, wird das Label deaktiviert dargestellt und reagiert nicht mehr auf Eingaben.

```powershell
$label.Enabled = $false

```

> 💡 **Hinweis** Bei einem gewöhnlichen Label betrifft `Enabled` hauptsächlich die Darstellung. Ein Label ist standardmäßig ohnehin nicht über die Tabulator-Navigation fokussierbar.

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

#### **FlatStyle**

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

Der Wert von `FlatStyle` bestimmt die Darstellungsart des Labels.

Folgende Werte stehen zur Verfügung:

- **Flat** → flache Darstellung
- **Popup** → flache Darstellung mit Hervorhebung bei Interaktion
- **Standard** → Standarddarstellung
- **System** → Darstellung durch Windows

```powershell
$label.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 Labels dargestellt wird.

Änderungen an dieser Eigenschaft beeinflussen Schriftart, Schriftgröße und Schriftstil.

```powershell
$label.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 Labels dargestellt wird.

```powershell
$label.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 im Label angezeigt werden soll.

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

```

Ist gleichzeitig Text vorhanden, bestimmt `TextAlign` beziehungsweise `ImageAlign`, wie die Inhalte innerhalb des Labels positioniert werden.

</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 Labels dargestellt wird.

```powershell
$label.ImageAlign = "MiddleCenter"

```

</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 ist kein Bild ausgewählt.

```powershell
$label.ImageList = $imageList
$label.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.

```powershell
$label.ImageList = $imageList
$label.ImageKey = "Info"

```

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

</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 das Label ein Bild beziehen kann.

Welche Grafik verwendet wird, wird anschließend über `ImageIndex` oder `ImageKey` bestimmt.

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

```

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

#### **Location**

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

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

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

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

```

> 💡 **Hinweis** Wird das Label durch einen Layout-Container oder `Dock` positioniert, wird `Location` vom Layoutsystem 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 Labels zu benachbarten Controls fest.

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

```powershell
$label.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 Labels fest.

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

```powershell
$label.MaximumSize = "300, 100"

```

</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 Labels fest.

```powershell
$label.MinimumSize = "100, 25"

```

</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 Labels fest.

Der Name dient ausschließlich der Identifikation innerhalb des Programms und wird dem Benutzer nicht angezeigt.

```powershell
$label.Name = "lblUsername"

```

</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 Labels und dessen Inhalt fest.

```powershell
$label.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 Labels fest.

```powershell
$label.Size = "200, 35"

```

Ist `AutoSize` aktiviert, kann die Größe automatisch anhand des Inhalts angepasst werden.

</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 Label den Fokus erhält, wenn der Benutzer die **Tabulator-Taste** betätigt.

Standardmäßig besitzt ein Label einen `TabIndex`, obwohl es normalerweise nicht über die Tabulator-Navigation fokussiert werden kann.

```powershell
$label.TabIndex = 2

```

> 💡 **Hinweis** `TabIndex` wird beim Label erst relevant, wenn `TabStop` auf `True` gesetzt wird.

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

#### **TabStop**

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

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

Beim `Label` ist diese Eigenschaft standardmäßig auf `False` gesetzt.

```powershell
$label.TabStop = $true

```

Dadurch kann das Label Teil der Tabulator-Navigation werden.

> 💡 **Hinweis** Ein gewöhnliches Label ist kein interaktives Eingabeelement. Deshalb ist `TabStop` standardmäßig deaktiviert.

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

#### **Text**

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

Der Wert von `Text` legt den sichtbaren Text des Labels fest.

```powershell
$label.Text = "Benutzername:"

```

Standardmäßig besitzt diese Eigenschaft den Wert `""` (leerer String).

</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 Labels dargestellt wird.

```powershell
$label.TextAlign = "MiddleCenter"

```

Dadurch wird der Text sowohl horizontal als auch vertikal zentriert.

</details><details id="bkmrk-usecompatibletextren"><summary>UseCompatibleTextRendering</summary>

#### **UseCompatibleTextRendering**

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

Der Wert von `UseCompatibleTextRendering` bestimmt, welche Textdarstellung für das Label verwendet wird.

Bei `False` wird die neuere GDI-basierte Textdarstellung verwendet. Bei `True` wird die ältere GDI+-basierte Darstellung verwendet.

```powershell
$label.UseCompatibleTextRendering = $true

```

Die Eigenschaft ist hauptsächlich für Kompatibilität mit älteren Anwendungen relevant.

> 💡 **Hinweis** In den meisten Fällen kann der Standardwert verwendet werden. Die Eigenschaft wird insbesondere dann interessant, wenn Unterschiede bei der Textdarstellung, beispielsweise bei Zeilenumbruch oder Schriftmessung, auftreten.

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

#### **UseMnemonic**

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

Der Wert von `UseMnemonic` legt fest, ob das Zeichen `&` im Text zur Definition eines **Tastaturkürzels** verwendet wird.

Ist die Eigenschaft aktiviert, wird das Zeichen direkt vor einem Buchstaben als Kennzeichnung für eine Mnemonic-Taste interpretiert.

```powershell
$label.Text = "&Name:"
$label.UseMnemonic = $true

```

Das `N` kann dadurch als Zugriffstaste verwendet werden.

Soll das Zeichen `&` tatsächlich angezeigt werden, kann es durch `&&` maskiert werden.

```powershell
$label.Text = "Speichern && Beenden"

```

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

#### **Visible**

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

Der Wert von `Visible` legt fest, ob das Label sichtbar ist.

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

```powershell
$label.Visible = $false

```

Wird die Eigenschaft auf `False` gesetzt, wird das Label ausgeblendet.

</details>---

# Events

Ein `Label` kann auf verschiedene Ereignisse reagieren. Besonders häufig werden Mausereignisse verwendet, wenn das Label wie ein anklickbares Element eingesetzt wird.

<table id="bkmrk-event-beschreibung-c"><thead><tr><th>Event</th><th>Beschreibung</th></tr></thead><tbody><tr><td>`Click`</td><td>Das Label wurde angeklickt.</td></tr><tr><td>`DoubleClick`</td><td>Das Label wurde doppelt angeklickt.</td></tr><tr><td>`MouseEnter`</td><td>Der Mauszeiger befindet sich über dem Label.</td></tr><tr><td>`MouseLeave`</td><td>Der Mauszeiger verlässt das Label.</td></tr><tr><td>`MouseDown`</td><td>Eine Maustaste wurde über dem Label gedrückt.</td></tr><tr><td>`MouseUp`</td><td>Eine Maustaste wurde über dem Label losgelassen.</td></tr><tr><td>`TextChanged`</td><td>Der Text des Labels wurde geändert.</td></tr><tr><td>`VisibleChanged`</td><td>Die Sichtbarkeit des Labels wurde geändert.</td></tr><tr><td>`EnabledChanged`</td><td>Der Aktivierungszustand des Labels wurde geändert.</td></tr><tr><td>`FontChanged`</td><td>Die Schriftart des Labels wurde geändert.</td></tr><tr><td>`ForeColorChanged`</td><td>Die Textfarbe des Labels wurde geändert.</td></tr><tr><td>`SizeChanged`</td><td>Die Größe des Labels wurde geändert.</td></tr></tbody></table>

### Event hinzufügen

Events werden beim `Label` mit dem Präfix `Add_` hinzugefügt.

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

    Write-Host "Label wurde geklickt."
})

```

### Event entfernen

Ein zuvor hinzugefügtes Event kann über das entsprechende `Remove_`-Präfix wieder entfernt werden.

```powershell
$label.Remove_Click($event)

```

---

# Tipps

#### Label automatisch an den Text anpassen

Mit `AutoSize` kann die Größe automatisch an den Inhalt angepasst werden.

```powershell
$label.AutoSize = $true

```

---

# Typische Verwendung

Ein `Label` wird häufig für folgende Aufgaben verwendet:

- Beschriftungen von Eingabefeldern
- Überschriften
- Statusinformationen
- Hinweise und Hilfetexte
- Anzeigen von Werten
- klickbare Text-Elemente
- Anzeige von Icons oder Bildern

Ein typisches Formular kann beispielsweise so aufgebaut sein:

```powershell
$label = [System.Windows.Forms.Label]::new()

$label.Text      = "Benutzername:"
$label.AutoSize  = $true
$label.Location  = "20, 20"

$form.Controls.Add($label)

```

---

# Label als klickbares Element

Obwohl ein `Label` hauptsächlich zur Darstellung von Informationen dient, kann es auf Mausereignisse reagieren.

Dadurch kann es beispielsweise als einfacher Link oder als Schaltfläche für kleinere Aktionen verwendet werden.

```powershell
$label.Text   = "Über das Programm"
$label.Cursor = [System.Windows.Forms.Cursors]::Hand

$label.Add_Click({
    Show-About
})

```

Für komplexere Aktionen sollte jedoch weiterhin ein `Button` verwendet werden.

> 💡 **Hinweis** Ein `Label` besitzt zwar ein `Click`-Event, ist aber semantisch kein Button. Bei wichtigen oder häufig verwendeten Aktionen ist ein `Button` daher die bessere Wahl.

---

# Hinweise

- `Label` dient hauptsächlich zur **Darstellung von Informationen**.
- `AutoSize` ist beim `Label` standardmäßig aktiviert.
- `TabStop` ist beim `Label` standardmäßig deaktiviert.
- `TabIndex` ist vorhanden, wird aber erst relevant, wenn `TabStop` aktiviert wird.
- Über `Image`, `ImageList`, `ImageIndex` und `ImageKey` können Bilder angezeigt werden.
- Mit `TextAlign` kann der Text innerhalb des Labels positioniert werden.
- Über `Click` kann ein Label interaktiv gemacht werden.
- Für echte Benutzeraktionen sollte in der Regel ein `Button` verwendet werden.

```

Eine kleine Korrektur gegenüber meiner vorherigen Antwort ist dabei wichtig: **`TabIndex` und `TabStop` sind beim `Label` tatsächlich vorhanden, aber `TabStop` steht standardmäßig auf `False`**. Das ist für deine Doku die relevante Information, statt so zu tun, als wäre die bloße Existenz der beiden Properties schon praktisch bedeutungsvoll. WinForms liebt solche geerbten Eigenschaften. :contentReference[oaicite:1]{index=1}

```