Rubrik: Controls · ListBox & ComboBox | VB-Versionen: VB2005, VB2008 | 29.06.09 |
CheckedItemCount in der CheckedListBox kontrollieren Eine Klasse, die die CheckedListBox so erweitert, dass man festlegen kann, wieviele Einträge maximal selektiert (ausgewählt) werden dürfen. | ||
Autor: Dieter Otter | Bewertung: | Views: 13.638 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Heute stellen wir Ihnen eine Klasse vor, die die Standard-CheckedListBox dahingehend erweitert, dass man festlegen kann, wieviele Einträge der User maximal selektieren (auswählen) darf. Weiterhin stellt die Klasse auch eine Eigenschaft zur Verfügung, die die aktuelle Anzahl selektierter Einträge zurückgibt.
Public Class CheckedListBoxEx Inherits CheckedListBox ' Anzahl aktuell markierter Einträge Private _CheckedCount As Integer = 0 ' Anzahl max. selektierbarer Einträge Private _MaxCheckedItems As Integer = 0
''' <summary> ''' Gibt die Anzahl der Einträge zurück, die aktuell selektiert sind. ''' </summary> Public ReadOnly Property CheckedCount() As Integer Get Return _CheckedCount End Get End Property
''' <summary> ''' Legt die Anzahl Einträge fest, die ausgewählt werden dürfen. ''' </summary> Public Property MaxCheckedItems() As Integer Get Return _MaxCheckedItems End Get Set(ByVal value As Integer) _MaxCheckedItems = value ' ggf. zuviel selektierte Einträge deselektieren If value > 0 AndAlso value < CheckedCount Then With Me.Items For i As Integer = .Count - 1 To 0 Step -1 If Me.GetItemCheckState(i) <> CheckState.Unchecked Then Me.SetItemCheckState(i, CheckState.Unchecked) If _CheckedCount <= value Then Exit For End If Next End With End If End Set End Property
''' <summary> ''' Aktualisiert die Anzahl aktuell selektierter Einträge ''' </summary> ''' <remarks>Diese Prozedur sollte aufgerufen werden, wenn die ''' Liste via Clear-Aufruf gelöscht wurde bzw. einzelne Listen-Einträge ''' via Remove-Methode aus der Liste entfernt wurden.</remarks> Public Sub RefreshCount() _CheckedCount = 0 For i As Integer = 0 To Me.Items.Count - 1 If Me.GetItemCheckState(i) <> CheckState.Unchecked Then _CheckedCount += 1 End If Next End Sub
Private Sub CheckedListBoxEx_ItemCheck(ByVal sender As Object, _ ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles Me.ItemCheck If e.NewValue = CheckState.Checked Then ' Prüfen, ob die max. zulässige Anzahl erreicht... If MaxCheckedItems > 0 AndAlso CheckedCount >= MaxCheckedItems Then ' Auswahl unterbinden e.NewValue = CheckState.Unchecked Else ' Anzahl ausgewählter Elemente um 1 erhöhen _CheckedCount += 1 End If Else ' Anzahl ausgewählter Elemente um 1 verringern _CheckedCount -= 1 End If End Sub
End Class
Beispiel:
' es dürfen nur max. 3 Einträge gleichzeitig selektiert werden Me.CheckedListBox1.MaxCheckedItems = 3
Hinweis:
Setzen Sie MaxCheckedItems auf 0, wenn der User beliebig viele Einträge selektieren können soll.