# FolderBrowserDialog

Öffnet einen Dialog zur Auswahl eines Ordners.  
Typischer Windows-"Ordner auswählen"-Dialog. Weil Menschen offenbar selbst beim Auswählen eines Verzeichnisses noch eine GUI brauchen und nicht einfach `"C:\Irgendwas"` eintippen können.

---

## Konstruktor

```powershell
$dialog = [System.Windows.Forms.FolderBrowserDialog]::new()

```

---

# Eigenschaften

## `Description`

Text oberhalb des Verzeichnisbaums.

```powershell
$dialog.Description = "Wähle einen Zielordner aus"

```

---

## `SelectedPath`

Der aktuell ausgewählte Ordnerpfad.

Kann:

- vor dem Öffnen gesetzt werden → Startordner
- nach dem Schließen ausgelesen werden → ausgewählter Ordner

```powershell
$dialog.SelectedPath = "C:\Temp"

```

```powershell
$dialog.SelectedPath

```

---

## `RootFolder`

Legt fest, ab welchem Systemordner der Benutzer navigieren darf.

Verwendet Werte aus:

```powershell
[System.Environment+SpecialFolder]

```

Beispiele:

- `Desktop`
- `MyComputer`
- `MyDocuments`
- `ProgramFiles`

```powershell
$dialog.RootFolder = [System.Environment+SpecialFolder]::Desktop

```

---

## `ShowNewFolderButton`

Bestimmt, ob die Schaltfläche **"Neuen Ordner erstellen"** angezeigt wird.

```powershell
$dialog.ShowNewFolderButton = $true

```

---

# Methoden

## `ShowDialog()`

Öffnet den Dialog.

Rückgabewert:

```powershell
[System.Windows.Forms.DialogResult]

```

Meist:

- `OK`
- `Cancel`

```powershell
$result = $dialog.ShowDialog()

```

---

## `Dispose()`

Gibt verwendete Ressourcen frei.

Technisch nicht immer zwingend nötig, aber sauberer. Besonders wenn man viele Dialoge erzeugt. Windows Forms sammelt sonst gerne kleinen Müll an wie ein Messie mit Kabelschublade.

```powershell
$dialog.Dispose()

```

---

# Einfaches Beispiel

```powershell
Add-Type -AssemblyName System.Windows.Forms

$dialog = [System.Windows.Forms.FolderBrowserDialog]::new()

$dialog.Description = "Wähle einen Ordner"
$dialog.SelectedPath = "$env:USERPROFILE\Desktop"
$dialog.ShowNewFolderButton = $true

if ($dialog.ShowDialog() -eq "OK") {
    $dialog.SelectedPath
}

$dialog.Dispose()

```

---

# Typischer Ablauf

```powershell
Dialog erstellen
    ↓
Eigenschaften setzen
    ↓
ShowDialog()
    ↓
DialogResult prüfen
    ↓
SelectedPath verwenden
    ↓
Dispose()

```

---

# Wichtige Hinweise

## `SelectedPath` setzt auch den Startordner

Viele denken:

> "`RootFolder` bestimmt den Startordner"

Nein.  
`RootFolder` begrenzt nur den sichtbaren Bereich.

Der tatsächliche Startordner kommt meistens von:

```powershell
SelectedPath

```

---

## Benutzer kann abbrechen

Darum niemals direkt:

```powershell
$dialog.SelectedPath

```

verwenden ohne vorher:

```powershell
ShowDialog()

```

zu prüfen.

Sonst arbeitest du eventuell mit leerem Inhalt weiter. Und plötzlich löscht ein Skript rekursiv `"\"`. Kleine Eskalation. Riesige Wirkung.

---

# Unterschied zu `OpenFileDialog`

<table id="bkmrk-dialog-zweck-folderb"><thead><tr><th>Dialog</th><th>Zweck</th></tr></thead><tbody><tr><td>`FolderBrowserDialog`</td><td>Ordner auswählen</td></tr><tr><td>`OpenFileDialog`</td><td>Datei auswählen</td></tr><tr><td>`SaveFileDialog`</td><td>Speicherort + Dateiname auswählen</td></tr></tbody></table>

---

# Typische Verwendung

- Installationspfad wählen
- Backup-Ordner wählen
- Exportpfad wählen
- Scan-Verzeichnis wählen
- Musik-/Bildordner auswählen
- Benutzerfreundliche Pfadauswahl in GUIs

---

# Minimalbeispiel

```powershell
if ($dialog.ShowDialog() -eq "OK") {
    $path = $dialog.SelectedPath
}

```

Das ist im Grunde der Kern von allem hier. Der Rest ist Komfort, Einschränkung oder kosmetische Kontrolle über das Windows-Chaos von 2003.