Skip to main content

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

  • BackColorSystemColors.Window
    Hintergrundfarbe

  • BorderStyleFixed3D
    Rahmenstil (None, FixedSingle, Fixed3D)

  • CheckOnClick$false
    Checkbox wird direkt beim Klick geändert (ohne zweiten Klick)

  • DockNone
    Layout im Container

  • Enabled$true
    Aktiv / deaktiviert

  • FontStandard-Systemfont
    Schriftart

  • ForeColorSystemColors.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!)

  • SelectionModeOne
    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:
SelectedItemCheckedItems

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

  • SelectedItem benutzt statt CheckedItems
  • ItemCheck falsch verstanden (Timing!)
  • Doppel-Events durch Click + ItemCheck
  • CheckOnClick = $false → wirkt wie Bug

🧩 Mentales Modell

Die CheckedListBox hat zwei Zustände gleichzeitig:

  1. Fokus (SelectedItem)
  2. 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