Skip to main content

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
  • SelectionModeOne
    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
  • DockNone
    Layout im Container
  • ItemHeight(abhängig von Font)

Aussehen (Appearance)

  • BackColorSystemColors.Window
    Hintergrundfarbe
  • ForeColorSystemColors.WindowText
    Textfarbe
  • FontStandard-Systemfont
    Schriftart
  • BorderStyleFixed3D
    Rahmenstil (None, FixedSingle, Fixed3D)
  • Visible$true
    Sichtbarkeit

Meta / System

  • Name""
    Interner Name
  • TopIndex – 0
    Oberstes sichtbares Item


Größe

Die CheckedListBox ist im Grunde eine ListBox mit eingebauten Checkboxen. 

CheckedListBox 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

  • SelectedItem betrifft nur das Item, welches Ausgewählt ist.
  • 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

$checkListBox.CheckOnClick = $true

🧩

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