# RichTextBox

**Namespace:** `System.Windows.Forms`

<details id="bkmrk-properties-%2F-eigensc"><summary>Properties / Eigenschaften</summary>

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

---

- **BackColor** – *SystemColors.Window*  
    Hintergrundfarbe der RichTextBox
- **BorderStyle** – *Fixed3D*  
    Rahmenstil (`None`, `FixedSingle`, `Fixed3D`)
- **Font** – *Standard-Systemfont*  
    Schriftart und -größe
- **ForeColor** – *SystemColors.WindowText*  
    Textfarbe
- **HideSelection** – *$true*  
    Steuert, ob der Text im nicht markierten Zustand verborgen wird
- **Text** – *""*  
    Der gesamte Text in der RichTextBox
- **WordWrap** – *$true*  
    Zeilenumbruch aktivieren/deaktivieren
- **Rtf** – *""*  
    Ruft den RTF-Inhalt der RichTextBox ab oder setzt ihn
- **Multiline** – *$true*  
    Zeigt Text auf mehreren Zeilen
- **SelectionAlignment** – *Left*  
    Ausrichtung des Textes in der aktuellen Auswahl (`Left`, `Center`, `Right`)
- **SelectionColor** – *SystemColors.HighlightText*  
    Farbe der ausgewählten Textstellen
- **SelectionFont** – *Standard-Schrift*  
    Schriftart der Auswahl
- **SelectionBackColor** – *SystemColors.Highlight*  
    Hintergrundfarbe der Auswahl
- **SelectionLength** – 0  
    Länge der aktuellen Auswahl
- **SelectionStart** – 0  
    Der Startindex der aktuellen Auswahl
- **TextChanged** – *$false*  
    Event wird ausgelöst, wenn sich der Text ändert

</details>Die **RichTextBox** ist eine erweiterte Textbox, die es ermöglicht, formatierte Textinhalte darzustellen und zu bearbeiten. Sie unterstützt RTF (Rich Text Format) sowie einfache Textformate.

---

#### **Erstellen**

```powershell
# Erstellen
$richTextBox = New-Object System.Windows.Forms.RichTextBox
$richTextBoxNew = [System.Windows.Forms.RichTextBox]::new()

# Größe & Position
$richTextBox.Size = New-Object System.Drawing.Size(400, 200)
$richTextBox.Location = New-Object System.Drawing.Point(10,10)

# Text setzen
$richTextBox.Text = "Hallo, dies ist ein Testtext in der RichTextBox!"

# Formatierter Text (RTF)
$richTextBox.Rtf = "{\rtf1\ansi\ansicpg1252\uc1\pard\lang1031\f0\fs20 Hallo, \b dies ist ein \i Test \b0\i0 Text.\par}"

```

#### **📥 Werte auslesen**

```powershell
# Einfacher Text
$plainText = $richTextBox.Text

# RTF-Text
$rtfText = $richTextBox.Rtf

# Auswahl
$selectedText = $richTextBox.SelectedText
```

👉 **Unterschied:**  
`Text` gibt nur den normalen Text zurück, während `Rtf` den gesamten formatierten Text (inklusive Formatierung) liefert.

---

## <span role="text">**Events -** *RichTextBox*</span>

#### <span role="text">**TextChanged**</span>

Wird ausgelöst, wenn sich der Text in der RichTextBox ändert.

```Powershell
$richTextBox.Add_TextChanged({
Write-Host "Text hat sich geändert!"
})
```

---

#### <span role="text">**SelectionChanged**</span>

Wenn der Benutzer die Auswahl ändert, wird dieses Event ausgelöst.

```Powershell
$richTextBox.Add_SelectionChanged({
Write-Host "Neue Auswahl: $($richTextBox.SelectedText)"
})
```

---

#### <span role="text">**LinkClicked**</span>

Wenn der Benutzer auf einen Link klickt, wird dieses Event ausgelöst.

```powershell
$richTextBox.Add_LinkClicked({
param($sender, $e)
Write-Host "Link angeklickt: $($e.Link)"
})
```

---

## <span role="text">**Tipps &amp; Tricks**</span>

#### **Formatierter Text**

```powershell
$richTextBox.SelectionColor = "Red"
$richTextBox.SelectionFont = New-Object System.Drawing.Font("Arial", 12, [System.Drawing.FontStyle]::Bold)

$richTextBox.AppendText(" Dies ist ein Text mit roter Schrift und fettem Arial.")
```

---

#### **RTF-Inhalt speichern**

```powershell
# RTF in Datei speichern
$richTextBox.SaveFile("C:\Pfad\zur\Datei.rtf", [System.Windows.Forms.RichTextBoxStreamType]::RichText)
```

---

#### **Hyperlinks hinzufügen**

```powershell
$richTextBox.AppendText("Hier klicken: ")
$richTextBox.InsertLink("https://www.example.com")
```

---

## ⚠️ Typische Stolperfallen

- **Text wird nicht formatiert**, aber du hast vergessen, den richtigen Stream (RTF vs. Text) zu verwenden.
- **Events feuern zu oft**: Achte darauf, dass du nicht zu viele Events auslöst. Besonders `TextChanged` ist gefährlich, weil es oft auch bei jeder kleinen Änderung feuert.

---

## 🧩 Best Practice

- Für einfache Textfelder immer die normale `TextBox` verwenden.
- Nutze `RichTextBox`, wenn du Formatierung und erweiterte Textoptionen brauchst.
- **RTF ist dein Freund**, wenn du komplexe Formatierungen brauchst – ansonsten geht auch normaler Text.