Comment limiter le nombre d'items selectionnés dans une checkedlistbox en vb.net

Description

La classe myCheckedListBox hérite de CheckedListBox et permet de limiter le nombre d'items selectionnés dans la liste.

Un évènement Depassement est généré lorsque l'utilisateur dépasse le nombre autorisé.

Source / Exemple :


Imports System
Imports System.Windows
Imports System.Windows.Forms

'-----------------------------------------------------------------
' Classe : myCheckedListBox
'          derrivée de CheckedListBox
'
' Cette classe permet de limiter le nombre d'items selectionnés
' dans la liste.
'
' Evenement Depassement : Boolean
'       
' Philippe Casasnovas
' Décembre 2003
'-----------------------------------------------------------------

Public Class myCheckedListBox
    Inherits CheckedListBox

    Private _MaxSelectedItem As Integer                     ' Nombre maximum d'items selectionnables
    Public Event Depassement(ByVal Resultat As Boolean)     ' Evènement pour voir si l'utilisateur a depassé la selection maximum

    ' Nombre maximum d'items selectionnables 
    Public Property MaxSelectedItem() As Integer
        Get
            Return _MaxSelectedItem
        End Get
        Set(ByVal Value As Integer)
            _MaxSelectedItem = Value
        End Set
    End Property

    ' Constructeur
    Public Sub New()
        MyBase.New()
        MaxSelectedItem = 5         ' Nombre d'items selectionnables par défaut
    End Sub

    ' Verrifie le nombre d'items selectionnés
    ' Si le nombre est superieur, met la selection de la ligne à false.
    ' Déclenche ensuite l'évènement Depassement
    Private Sub Verrification()
        Dim Item As Integer
        Dim Count As Integer
        For Each Item In Me.Items
            If Me.GetItemCheckState(Item) = CheckState.Checked Then
                Count = Count + 1
            End If
        Next
        If Count > _MaxSelectedItem Then
            Me.SetItemChecked(SelectedIndex, False)
            RaiseEvent Depassement(True)
        Else
            RaiseEvent Depassement(False)
        End If
    End Sub

    ' On test au changement d'index selectionné
    Private Sub myCheckListBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.SelectedIndexChanged
        Verrification()
    End Sub

    ' On test au mousedown de la souris
    Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs)
        Verrification()
    End Sub

    ' On test au keypress en cas de selection par la barre d'espace
    Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
        MyBase.OnKeyPress(e)
        Verrification()
    End Sub

    Protected Overrides Sub RefreshItem(ByVal index As Integer)
    End Sub

    Protected Overrides Sub SetItemsCore(ByVal items As System.Collections.IList)
    End Sub

End Class

Conclusion :


Tous commentaires seront les bienvenus.

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.