Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMBO PERSONNALISÉ PERMETTANT D'AVOIR LA FONCTIONNALITÉ AUTO COMPLETION (REMPLISSAGE AUTOMATIQUE PAR RECHERCHE INCREMENTALE)


Information sur la source

Catégorie :Control Source .NET ( DotNet ) Niveau : Initié Date de création : 30/03/2005 Date de mise à jour : 30/03/2005 19:51:49 Vu / téléchargé: 9 191 / 672

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

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

  • '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
'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


Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

30 mars 2005 19:51:49 :
pas de mise en jour pour l'instant

Commentaires et avis

signaler à un administrateur
Commentaire de ABL-Online le 02/04/2005 23:41:42

GOTO -->

http://www.vbfrance.com/code.aspx?ID=23147

signaler à un administrateur
Commentaire de crocejf2000 le 30/10/2006 09:57:01

Salut irnbru,

Merci pour ta source qui est très simple et qui fonctionne parfaitement.
Au début j'était partit sur le meme systeme que "ABL-Online" (commentaire plus haut), mais il y avais trop de bug (par exemple quand on tape rapidement dans le combo), mais avec ta source super simple et la gestion de l'évenement OnTextChanged ca va tout seul.

Par contre j'ai du faire des modifications car il y a certains problemes quand on remplis directement la combo avec DataSource.

A+ Jeff

signaler à un administrateur
Commentaire de BeerMan13 le 20/12/2006 13:43:07

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.

signaler à un administrateur
Commentaire de crocejf2000 le 20/12/2006 22:02:27

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

signaler à un administrateur
Commentaire de fcbarcelonaabdou le 01/06/2007 18:02:48

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

signaler à un administrateur
Commentaire de OneHacker le 16/06/2007 19:13:21

Surement qu'il programme en VB.Net 2003 en tout cas je te félicite ! 7/10 !

signaler à un administrateur
Commentaire de facteur le 27/08/2008 16:23:57

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

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,09 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.