Combo personnalisé permettant d'avoir la fonctionnalité auto completion (remplissage automatique par recherche incrementale)

Description

Ce code est simple, il s'agit d'une classe dérivée à partir de la classe représentant un ComboBox du .NET framework.

Il lui manquait une fonctionnalité importante ! L'autoCompletion ! (remplissage automatique du texte au fur à mesure que vous tapez du texte, le remplissage se fait par recherche incrémentale)

Voilà tout commentaire est bien sûr la bienvenue. Je voulais partager ce code qui est à mon avis précieux et un bon début pour commencer un composant combo personnalisé adapté à divers besoins....

Source / Exemple :


'partage par IRNBRU
'
'niveau : intermediaire
'
'en cas de probleme ou de bugs
'
'commentaires : legrandnico@yahoo.com
'

Imports System.Windows.Forms

'on va faire un combo qui remplit le texte automatiquement 
'au fur à mesure qu'on tape du texte : recherche incrementale
Public Class CompletionComboBox
    Inherits ComboBox

    Private _AutoComplete As Boolean = True
    'Variable permettant à la procedure OnTextChanged
    'de savoir si on effecture une recherche ou pas 

    Protected Overrides Sub OnKeyDown(ByVal e As KeyEventArgs)
        'evenement lance quand on presse sur une touche dans le combo
        _AutoComplete = e.KeyCode <> Keys.Delete And e.KeyCode <> Keys.Back
        'Si on a taper sur la touche pour supprimer ou pour revenir en arriere 
        'la recherche ne se fait pas
        MyBase.OnKeyDown(e)
        'puisqu'on a "remplace" (overrides) la methode OnKeyDown de la classe
        ' de base ComboBox sinon les delegues qui sont enregistres
        'ne recevront plus la notification de l'événement (à savoir une touche
        'a ete pressee
    End Sub

    Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
        'Cette methode est lancee lorsque le texte dans le combo a ete change
        If _AutoComplete Then
            'on s'assure que l'utilisateur n'a pas tape la touche retour (fleche droite ou 
            'la touche de suppresion
            Dim TextEntered As String = Me.Text
            'on recupere le texte en cours dans le combo
            Dim index As Integer = Me.FindString(TextEntered)
            'La methode FindString fait partie de la classe ComboBox
            If index >= 0 Then
                'Si le texte tape existe dans l'un des elements du combo
                _AutoComplete = False

                Me.SelectedIndex = index
                'On deplace la selection du combo en fonction du texte trouve
                _AutoComplete = True

                Me.Select(TextEntered.Length, Me.Text.Length)
                'on ne seletionne que le texte qui a ete ajoute
            End If
        End If
        MyBase.OnTextChanged(e)
        'meme explication seulement l'evenement est : changement de texte
    End Sub
End Class

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.