Saisie assistée d'une zone de texte

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 638 fois - Téléchargée 40 fois

Contenu du snippet

Ce petit bout de code permet de créer une saisie assistée (ou semi-automatique) d'un champs de texte (comme par exemple sur ce site même lorsque vous tapez quelque chose dans la zone de recherche dont le début commence comme une recherche antérieure que vous aviez faite)

J'ai ici pris l'exemple d'un textbox mais cela peut être adapté à une combobox par exemple

Le principe est simple:
- on crée un label que l'on affichera ou pas en fonction du besoin (collez-le
juste au dessus ou au dessous du textbox),
- on charge un tableau contenant certaines chaînes (celles qui sont
susceptibles d'être saisies),
- pour chaque caractère saisi dans le textbox, on compare ce texte avec le
début des chaînes du tableau,
- lorsqu'une chaîne commençant pareil est trouvée, on l'affiche dans le label,
- il suffit alors de taper <Entrée> ou de double-cliquer sur le label pour
affecter sa "caption" dans la zone de texte

Source / Exemple :


' déclaration d'un tableau contenant certaines chaînes de caractères
' il peut bien sûr être d'une autre taille
Dim tablo(0 To 4) As String

' chargement du tableau (on peut bien entendu le charger d'une autre 
' manière)
Private Sub Form_Load()
        
        tablo(0) = "toto"
        tablo(1) = "tete"
        tablo(2) = "titi"
        tablo(3) = "tutu"
        tablo(4) = "tata"
        
End Sub

' les évènements suivants se déclenchent pour chaque caractère
' saisi dans le textbox
Private Sub Text1_Change()

    ' déclaration d'un booléen indiquant si une possible chaîne
    ' compatible été trouvée
    Dim présent As Boolean
    
    présent = False
    
    i = 0
    
    Do
        ' le textbox ne doit pas être vide sinon la
        ' première chaîne rencontrée sera déclarée compatible
        ' Si dans le tableau une chaîne commence comme le texte
        ' saisi, on affiche le label avec la première
        ' chaîne de caractère pouvant correspondre
        If Text1.Text <> "" And tablo(i) Like Text1.Text + "*" Then
            
            Label1.Visible = True   ' affichage du label
            présent = True           
            Label1.Caption = tablo(i)  ' affectation de la chaîne à proposer dans 
                                                 ' sa caption
        
        Else
        
            Label1.Caption = ""
            
        End If
        
        i = i + 1
    
    Loop While i < 5 And présent = False
    
End Sub

' lorsque l'on appuie sur <Entrée> et que le label est visible et contient une 
' chaîne on affecte cette "caption" au textbox
Private Sub Text1_KeyPress(KeyAscii As Integer)

    If Label1.Visible = True and Label1.Caption <> "" and KeyAscii = 13 Then
    ' 13 est le code ASCII de la touche <Entrée>
        
        Text1.Text = Label1.Caption
        Label1.Caption = ""
        Label1.Visible = False
        
    End If
    
End Sub

' lorsque l'on double - clique sur le label et que celui - ci n'est pas vide
' on affecte sa "caption" au textbox
Private Sub Label1_DblClick()
    
    Text1.Text = Label1.Caption
    Label1.Caption = ""
    Label1.Visible = False
    
End Sub

Conclusion :


La propriété Visible du label par défaut doit être "False"
Pour une visibilté optimum mieux vaut que le label et le textbox soient collés (mais ça dépend de vous)

A voir également

Ajouter un commentaire

Commentaires

rnosat
Messages postés
132
Date d'inscription
mardi 31 octobre 2000
Statut
Membre
Dernière intervention
2 mai 2004
-
une petite capture d'ecran et un zip seraient les bienvenus !
cs_temoin
Messages postés
59
Date d'inscription
samedi 18 janvier 2003
Statut
Membre
Dernière intervention
30 octobre 2006
-
merci mec j'avais besoin d'un truc de mème pour un jeux lingo surtout je savais pas comment verifier les lettres ajouter par l'utulisateur
algo69
Messages postés
47
Date d'inscription
samedi 13 décembre 2003
Statut
Membre
Dernière intervention
13 mars 2005
-
Merci à toi
Justement je viens de copier un code pour le meme but, mais il n'est pas aussi simple que le tien.

chapeau
DijaDijaid
Messages postés
2
Date d'inscription
lundi 2 avril 2012
Statut
Membre
Dernière intervention
25 mai 2012
-
merci pour ce code

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.