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

Soyez le premier à donner votre avis sur cette source.

Vue 13 504 fois - Téléchargée 977 fois

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

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
vendredi 22 août 2008
Statut
Membre
Dernière intervention
27 août 2008

bonjour a tous,

je ne suis pas specialiste des combobox et je ne sais comment inserer le programme de nico sur l'autocompletion dans un combobox.
J'aurais besoin d'une aide..merci

facteur
Messages postés
1447
Date d'inscription
jeudi 2 novembre 2000
Statut
Membre
Dernière intervention
23 septembre 2007
2
Surement qu'il programme en VB.Net 2003 en tout cas je te félicite ! 7/10 !
Messages postés
1
Date d'inscription
lundi 16 avril 2007
Statut
Membre
Dernière intervention
1 juin 2007

Bonjour : je ne sais pas comment remplir une zone de liste (Datacombo)avec les données d'une table ke j'ai deja pour k'elle s'affiche pour tt detail veuillez me repondre voici mon adresse mail:abika12@hotmail.com ou bien abika12@gmail.com
Messages postés
260
Date d'inscription
lundi 27 janvier 2003
Statut
Membre
Dernière intervention
27 août 2008
1
Salut BeerMan13,

Je crois que dans VS 2005, l'autocompletion est déja implémentée, donc tu n'a surement pas besoin de te casser la tête avec tout ca.

Ci ce n'est pas le cas, pour utiliser la class, copie les texte ci dessus (code) dans une feuille vierge, ensuite dans ta form, tu va chercher un combobox que tu place ou tu veut.
Dans ton fichier .vb, la déclaration de ce combo sera automatiquement généré, et donc il te reste plus qu'a changer la déclaration du genre 'Dim Ma_Combo as ComboBox' en 'Dim Ma_Combo as CompletionComboBox'.

Le contructeur va appeler la class CompletionComboBox qui hérite de Combobox donc elle récupère toute ses propriétés, ses évenement, ses variables publiques, etc... Vive l'héritage et le language objet...

Tu peut bien sur appeler les nouvelles fonctions qui on été décrite dans la nouvelle classe.

Au niveau bug, fait bien attention quand tu remplis ton combo avec un datasource (ou meme une source de donnée lambda), car ce code ne fonctionne pas.

Bonne prog, jeff
Messages postés
1
Date d'inscription
samedi 5 juin 2004
Statut
Membre
Dernière intervention
20 décembre 2006

Bonjour Jeff,

Comment on utilise cette Class avec un ComboBox .NET 2005 ?

Je doit glisser un combo dans ma form et instancier ta class ?
en appelant les Méthodes OnKeyDown et OnTextChanged ?

Merci,
Eric.
Afficher les 7 commentaires

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.