IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB6] ComboBox autocompletion


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut [VB6] ComboBox autocompletion
    Bonjour, je voulais savoir si en VB6, l'autocompletion est déjà présente ou il faut la faire soi-même?

    Dans mon projet j'ai un combobox qui possède 150 items (lignes), si l'utilisateur veut chercher, il ne doit pas tout dérouler la liste et c'est long, faut lire un par un si ce n'est pas trié alphabétiquement.

    Donc quand l'utilisateur tape un début de lettre ou mot, le combobox se déroule et propose seulement les items dont la chaine commence par ce qu'il a taper.. voila je crois avoir bien expliquer l'autocompletion ou l'intelisense

    En bref, je voulais savoir comment fait-on? y'a-t-il des exemples? sources?

    voila merci

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    En VBA, il y a la propriété MatchEntry
    Renvoie ou définit une valeur indiquant la façon dont un contrôle ListBox ou ComboBox fait des recherche dans ses listes pendant la saisie de l'utilisateur.
    ...
    Malheureusement, je ne la vois pas en VB qui, par contre, a la propriété Sorted
    Juste pour info

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Par défaut
    Bonjour,
    Ce n'est pas possible (à ma connaissance) avec un Combobox.
    Pour celà, utilise une ListBox et un TextBox que tu nommes txtRechercher.

    Dans un Module.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Declare Function sendMessageByString& Lib "user32" _
      Alias "SendMessageA" (ByVal hWnd As Long, _
      ByVal wMsg As Long, ByVal wParam As Long, _
      ByVal lparam As String)
     
    Public Const LB_SELECTSTRING = &H18C
    Dans la Form.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Private Sub txtRechercher_Change()
    'Appel API
      Dim entryNum As Long
      Dim txtARechercher As String
      txtARechercher = txtRechercher.Text
      entryNum = sendMessageByString(List1.hWnd, _
                LB_SELECTSTRING, 0, txtARechercher)
    End Sub
    jpleroisse

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    oui la propriété sorted sert pour trier, mais c'est dommage qu'il n'y a pas une propriété du type MatchEntry!

    Je crois qu'il faut le faire soit meme. J'ai cherché un peu partout sur le net, aucun code source en vue pour VB6....

    merci leroissejp, je vais tenter de faire ce que tu me propose et je posterai si ca marche ou pas.

  5. #5
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Pour info, lorque tu tapes un caractère dans un combo, et que tu le déroules, celui-ci, se place sur le 1er item correspondant au caractère tapé (s'il existe bien sûr)
    Sinon, il me semble bien avoir déjà donné un code qui fait ça

  6. #6
    Expert confirmé
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Par défaut
    Je savais bien que je l'avais déjà fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Combo1_Change()
        Dim i As Integer, start As Integer
        start = Len(Combo1.Text)
        For i = 0 To Combo1.ListCount - 1
            If Left(Combo1.List(i), start) = Combo1.Text Then
                Combo1.Text = Combo1.List(i)
            End If
        Next
        Combo1.SelStart = start
        Combo1.SelLength = Len(Combo1.Text)
    End Sub
    je vais mettre ça dans la FAQ, ca m'evitera de chercher, la prochaine fois

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    leroissejp

    Merci pour ton code, g essayé ca marche mais malheureusement ce n'est pas tout à fait ce que je recherche! Il me sera sans dout nécessaire d'insérer ton code plus tard dans mon projet, merci.


    Thierry AIM
    Ca marche à merveille! Je te remercie sincèrement de ton aide .

    Juste une petite question, est ce que c'est possible que lorsque l'utilisateur tape le mot, la liste déroulante se déroule automatiquement et va surligner le mot qui se rapproche le plus au mot cherché?

    Par exemple sous vb6, lorsque qu'on fait CTRL + ESPACE, y'a une liste déroulante qui se déroule juste ne bas du curseur, puis quand on tape ca sélectionne auto le mot.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    Sinon une petite remarque sur ton code:

    lorsque que l'utilisateur veut effacer une lettre, si après le mot rien n'est sélectionné, la touche backspace marche. Mais par contre quand y'a une partie du mot sélectionné, la touche backspace ne marche pas. On doit surligner tout le mot puis retaper.

    J'ai réussi à contourner ce problème, si tu veux le code, signale le moi!

    ps: je n'arrive pas à faire dérouler la liste déroulante lorsque l'utilisateur frappe...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 35
    Par défaut
    Pour le combobox, peut être faut il mettre sur l'évènement on change, l'action dérouler.

    Mais je ne voit pas où est la propriété pour dire que le combobox est déroulé.

    Merci d'avance

  10. #10
    Invité de passage
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1
    Par défaut Un code qui marche pas trop mal avec un combobox
    Désolé c'est peut être pas le plus source que vous verrez , mais ça fonctionne correctement

    Philippe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    ' Dans (Général) (déclaration)
    Dim thekey As Integer
    Dim theshift As Integer
     
    Private Sub Combo1_Change()
        Dim i As Integer, start As Integer
        Dim ShiftDown As Boolean
        Dim CtrlDown As Boolean
        Dim AltDown As Boolean
        ShiftDown = (theshift And vbShiftMask) > 0
        CtrlDown = (theshift And vbCtrlMask) > 0
        AltDown = (theshift And vbAltMask) > 0
        If thekey = vbKeyLeft Or thekey = vbKeyRight Or thekey = vbKeyUp Or thekey = vbKeyDown _
        Or thekey = vbKeyBack Or thekey = vbKeyDelete Or ShiftDown Or AltDown Or CtrlDown Then
     
            ' Nothing to do now !...maybe later ;-)
     
        Else
            start = Len(Combo1.Text)
            For i = 0 To Combo1.ListCount - 1
                If Left(Combo1.List(i), start) = Combo1.Text Then
                    Combo1.Text = Combo1.List(i)
                End If
            Next
            Combo1.SelStart = start
            Combo1.SelLength = Len(Combo1.Text)
        End If
    End Sub
     
    Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
        thekey = KeyCode
        theshift = Shift
    End Sub

Discussions similaires

  1. [VB6] combobox.itemvalue ?
    Par KilKennY dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 19/05/2009, 13h27
  2. combobox autocompletion probleme de souris
    Par cricrides dans le forum VB.NET
    Réponses: 2
    Dernier message: 07/03/2008, 15h00
  3. [VB6]Combobox: Combo de choix de couleurs
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 14
    Dernier message: 16/05/2007, 15h19
  4. Combobox autocompletion
    Par fixfix dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 08/03/2007, 11h46
  5. [VB6] ComboBox 6
    Par badrel dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 31/05/2006, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo