CheckedListBox
CheckedListBox
Namespace: System.Windows.Forms
Properties / Eigenschaften
- Property – Standardwert
Beschreibung oder Erläuterung der Eigenschaft
-
AllowDrop – $false
Drag & Drop erlauben -
Anchor – (Top, Left)
Verhalten bei Größenänderung -
BackColor – SystemColors.Window
Hintergrundfarbe -
BorderStyle – Fixed3D
Rahmenstil (None,FixedSingle,Fixed3D) -
CheckOnClick – $false
Checkbox wird direkt beim Klick geändert (ohne zweiten Klick) -
Dock – None
Layout im Container -
Enabled – $true
Aktiv / deaktiviert -
Font – Standard-Systemfont
Schriftart -
ForeColor – SystemColors.WindowText
Textfarbe -
FormattingEnabled – $true
Für komplexe Objekte -
HorizontalScrollbar – $false
Horizontale Scrollbar -
Location – (0,0)
Position -
Name – ""
Interner Name -
ScrollAlwaysVisible – $false
Scrollbar immer anzeigen -
TabIndex – 0
Tab-Reihenfolge -
TabStop – $true
Fokus per Tab -
ThreeDCheckBoxes – $false
3D-Darstellung der Checkboxen -
TopIndex – 0
Oberstes sichtbares Item -
Visible – $true
Sichtbarkeit
Items
-
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!) -
SelectionMode – One
Auswahlmodus (meist irrelevant hier) -
Sorted – $false
Automatisch sortieren
Größe
- Height – (abhängig vom Layout)
- ItemHeight – (abhängig von Font)
- Size – (Width=120, Height=96)
- Width – (abhängig vom Layout)
Die CheckedListBox ist im Grunde eine ListBox mit eingebauten Checkboxen.
Klingt simpel… ist aber genau da tückisch.
# 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 ist DER Klassiker, der dir später Logik zerschießt.
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.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