CheckedListBox
Namespace: System.Windows.Forms
Properties / Eigenschaften
- Property – Standardwert
Beschreibung oder Erläuterung der Eigenschaft
Verhalten (Behavior)
AllowDrop – $false
Drag & Drop erlaubenAnchor–(Top, Left)Verhalten bei Größenänderung
BackColor – SystemColors.WindowHintergrundfarbe
BorderStyle – Fixed3DRahmenstil (None, FixedSingle, Fixed3D)
CheckOnClick – $false
Checkbox wird direkt beim Klick geändert (ohne zweiten Klick)
Dock – NoneLayout im Container
Enabled – $true
Aktiv / deaktiviert
Font – Standard-SystemfontSchriftart
ForeColor – SystemColors.WindowTextTextfarbe
FormattingEnabled – $true
Für komplexe Objekte
– One
Auswahlmodus (meist irrelevant hier)
Location – (0,0)Position
Name – ""Interner Name
ScrollAlwaysVisible – $falseScrollbar immer anzeigen
TabIndex – 0Tab-Reihenfolge
TabStop – $trueFokus per Tab
ThreeDCheckBoxes – $false
3D-Darstellung der Checkboxen
TopIndexScrollAlwaysVisible – 0$falseOberstesScrollbar sichtbaresimmer Item
– $false
Horizontale Scrollbar
ItemsDaten / Inhalt (Data)
Items – (leer)
Alle EinträgeCheckedItems – (leer)
Alle aktiv angehakten ItemsCheckedIndices – (leer)
Indizes der angehakten ItemsSelectedItem – $null
Aktuell markiertes Item (nicht gleich checked!)SelectionModeTabIndex –One0Auswahlmodus (meist irrelevant hier)
Sorted – $falseAutomatisch sortieren
GrößeLayout & Position
HeightLocation – (abhängig vom Layout)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)
Hintergrundfarbe ForeColor – SystemColors.WindowText
Textfarbe Font – Standard-Systemfont
Schriftart BorderStyle – Fixed3D
Rahmenstil (
None, FixedSingle, Fixed3D)
Visible – $trueSichtbarkeit
Meta / System
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.
# 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