Comment utiliser le Keypress [Résolu]

Signaler
Messages postés
8
Date d'inscription
vendredi 3 décembre 2010
Statut
Membre
Dernière intervention
1 février 2013
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
Bonjour,

Je suis débutante en VB et je suis en train d'utiliser un Vb 2010 Express

J'ai un problème en travaillant sur mon projet à l'école. J'essaie de faire une boîte et on tape un nombre binaire de 4 chiffre dans le textbox. Si l'utilisateur entre un chiffre hors 0 ou 1 ou plus de 4 chiffres, un MesgBox va ouvrir, puis on efface tout de suite la fausse valeur entrée. Donc j'ai écris un code comme suit:


Private Sub txtdonnee1_keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Txtdonnee1.KeyPress

If Len(Txtdonnee1.Text) > 4 And Not (e.KeyChar Chr(48) Or e.KeyChar Chr(49)) Then
e.Handled = False
MsgBox("Entrée Invalide!!!")
Txtdonnee1.Text += Chr(8)
End If

If Asc(e.KeyChar) = &HD Then
Call btn1_cliked()
End If

End Sub

Malheureusement ca marche pas, j'ai créé un nouveau projet pour tester ms il semble que vb ne lit pas cette partie de code.

Pouvez-vous m'indiquer ce que j'ai fait comme faute ou me suggérer d'autres solutions pour enfin avoir le résultat comme je veux.

Je vous mercie beaucoup.

2 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

Tu peux aussi permettre seulement les 0 et les 1
et bloquer les autres touches sauf le backspace
ou delete
sans msgbox
 Private Sub Binary_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles binary.KeyDown
        'verifie que la valeur de la touche frappée est 0 ou 1 ou backspace ou delete 
        If e.KeyValue AscW("0") Or e.KeyValue AscW("1") Or e.KeyValue = 8 Or e.KeyValue = 46 Then
            sender.readonly = False
        Else
            sender.readonly = True
        End If

    End Sub


avec un msgbox


Private Sub binary_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles binary.KeyDown
        'verifie que la valeur de la touche frappée est 0 ou 1 ou backspace ou delete 
        If e.KeyValue AscW("0") Or e.KeyValue AscW("1") Or e.KeyValue = 8 Or e.KeyValue = 46 Then
            sender.readonly = False
        Else
            MsgBox("seulement 0 ou 1")
        End If

    End Sub
Messages postés
45
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
17 août 2012

A titre d'exemple ...


Private Sub TextBox_prenom_candidat_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox_prenom_candidat.KeyPress

Call filtrage_saisie_clavier(e)

End Sub


Private Sub filtrage_saisie_clavier(ByVal e As System.Windows.Forms.KeyPressEventArgs)

'Filtrage des caractères pour la saisie de l'identié 
'Dim chaine_caracteres_numeriques As String = "1234567890"
'Dim chaine_caracteres_interdits As String = ".,:;/\?*"

Dim position As Integer
Dim chaine_caracteres_interdits As String = "<>,?;.:!§%*$£&°~#_/\(){}[]|@*+=1234567890"

'Test caractère numérique
'position = InStr(chaine_caracteres_numeriques, e.KeyChar)
'Si le caractère n'est pas trouvé dans la liste et si c'est pas la touche "retour arrière"
'alors le caractère n'est pas transmis au textbox
'If position 0 And Not AscW(e.KeyChar) 8 Then e.Handled = True

'Test caractère autre que ceux interdits
position = InStr(chaine_caracteres_interdits, e.KeyChar)
'Si le caractère est trouvé dans la liste alors le caractère n'est pas transmis au textbox
If position <> 0 Then e.Handled = True

End Sub