CheckedListBox
Namespace: System.Windows.Forms
Properties / Eigenschaften
- Property – Standardwert
Beschreibung oder Erläuterung der Eigenschaft
Verhalten (Behavior)
- AllowDrop – $false
Drag & Drop erlauben - CheckOnClick – $false
Checkbox wird direkt beim Klick geändert (ohne zweiten Klick) - Enabled – $true
Aktiv / deaktiviert - FormattingEnabled – $true
Für komplexe Objekte - SelectionMode – One
Auswahlmodus (meist irrelevant hier) - Sorted – $false
Automatisch sortieren - ThreeDCheckBoxes – $false
3D-Darstellung der Checkboxen - ScrollAlwaysVisible – $false
Scrollbar immer anzeigen - HorizontalScrollbar – $false
Horizontale Scrollbar - TabStop – $true
Fokus per Tab
Daten / Inhalt (Data)
- Items – (leer)
Alle Einträge - CheckedItems – (leer)
Alle aktiv angehakten Items - CheckedIndices – (leer)
Indizes der angehakten Items - SelectedItem – $null
Aktuell markiertes Item (nicht gleich checked!) - TabIndex – 0
Tab-Reihenfolge
Layout & Position
- Location – (0,0)
Position - Size – (Width=120, Height=96)
- Width – (abhängig vom Layout)
- Height – (abhängig vom Layout)
- Anchor – (Top, Left)
Verhalten bei Größenänderung - Dock – None
Layout im Container - ItemHeight – (abhängig von Font)
Aussehen (Appearance)
- BackColor – SystemColors.Window
Hintergrundfarbe - ForeColor – SystemColors.WindowText
Textfarbe - Font – Standard-Systemfont
Schriftart - BorderStyle – Fixed3D
Rahmenstil (None,FixedSingle,Fixed3D) - Visible – $true
Sichtbarkeit
Meta / System
- Name – ""
Interner Name - TopIndex – 0
Oberstes sichtbares Item
Größe
Die **CheckedListBox**CheckedListBox ist im Grunde eine ListBox mit eingebauten Checkboxen. Klingt simpel… ist aber genau da tückisch.
CheckedListBox erstellen
# Erstellen
$clb = New-Object System.Windows.Forms.CheckedListBox
$clbNew = [System.Windows.Forms.CheckedListBox]::new()
Items hinzufügen
$clb.Items.Add("Apfel")
$clb.Items.Add("Banane")
$clb.Items.AddRange(@("Orange","Mango","Traube"))
📥 Werte auslesen
# Alle angehakten Items
$checked = $clb.CheckedItems
# Indizes
$indices = $clb.CheckedIndices
# Einzelnes Item (nur Fokus, nicht Check!)
$selected = $clb.SelectedItem
👉 Wichtiger Unterschied:SelectedItem ≠ CheckedItems
Das
SelectedItem CheckedItems beinhaltet alle Items welches auch einen Haken haben
Events - CheckedListBox
ItemCheck
Wird ausgelöst, wenn ein Item gecheckt / ungecheckt wird.
Aber: Zustand ist noch nicht final!
$clb.Add_ItemCheck({
param($sender, $e)
Write-Host "Index:" $e.Index
Write-Host "Neu:" $e.NewValue
})
👉 Wenn du hier $clb.CheckedItems liest, bekommst du den alten Zustand.
SelectedIndexChanged
Nur Fokus geändert, nicht der Check.
$clb.Add_SelectedIndexChanged({
Write-Host "Markiert:" $clb.SelectedItem
})
Click
Feuert bei jedem Klick
$clb.Add_Click({
Write-Host "Click erkannt"
})
Tipps & Tricks - CheckedListBox
🔥 Check direkt beim Klick
$clb.checkListBox.CheckOnClick = $true
👉 Sonst brauchst du zwei Klicks. Und der User denkt, dein UI ist kaputt.
🧩 Alle gesetzten Werte holen
$clb.CheckedItems | ForEach-Object {
$_
}
🧩 Check programmatisch setzen
$clb.SetItemChecked(0, $true)
⚠️ Typische Stolperfallen
SelectedItembenutzt stattCheckedItemsItemCheckfalsch verstanden (Timing!)- Doppel-Events durch Click + ItemCheck
CheckOnClick = $false→ wirkt wie Bug
🧩 Mentales Modell
Die CheckedListBox hat zwei Zustände gleichzeitig:
- Fokus (SelectedItem)
- Check-Zustand (CheckedItems)
Wenn du das vermischst → Chaos.
🧩 Best Practice
- Für mehrere unabhängige Optionen → perfekt
- Für „eine Auswahl“ → falsches Control
- Für komplexe Daten → lieber eigene UI bauen