Limiter la saisie à certains caractères/touches dans un textbox en vb.net

Soyez le premier à donner votre avis sur cette source.

Snippet vu 23 794 fois - Téléchargée 42 fois


Contenu du snippet

Voila, c'est encore une source assez simple, mais qui pourra surement depanner certains...
les methodes que j'utilisais en vb6 n'étant plus utilisables, j'ai du passer deux heures à faire des tests sur les evenements keydown et keypress, jusqu'a trouver que l'annulation se resumait à e.Handled = True dans un evenement keypress... :)

Je n'ai pas mis d'exemples pour TOUTS les Char.ISblabla que vb gere, mais avec ca je pense que vous pouvez en deduire ce qu'il reste...

Source / Exemple :


Private Sub nombres_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles nombre.KeyPress
        'on accepte que les chiffres (e.KeyChar.IsDigit(e.KeyChar)), ainsi que la touche back (Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back) , sinon on annule (e.Handled = True)
        If Char.IsDigit(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back Then e.Handled = True
    End Sub

    Private Sub lettres_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles lettre.KeyPress
        'on accepte que des lettres, ainsi que la touche back
        If Char.IsLetter(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back Then e.Handled = True
    End Sub

    Private Sub majuscules_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles majuscule.KeyPress
        'on accepte que des majuscules, ainsi que la touche back
        If Char.IsUpper(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back Then e.Handled = True
    End Sub

    Private Sub texte_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles texte.KeyPress
        'on accepte chiffre et lettres (IsLetterOrDigit), espaces (IsWhiteSpace) et ponctuation (IsPunctuation)
        'ce qu'ils considerent comme ponctuation comporte certains characteres speciaux, comme le % ou le @...
        If Char.IsLetterOrDigit(e.KeyChar) = False And Char.IsWhiteSpace(e.KeyChar) = False And Char.IsPunctuation(e.KeyChar) = False Then e.Handled = True
    End Sub

    Private Sub decimaltxt_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles decimaltxt.KeyPress
        'petit exemple pratique :
        'on accepte chiffres et virgule, ainsi que la touche back. On remplace un eventuel point par une virgule, et on refuse la saisie d'une virgule en tant que premier caractere
        'remplacement du point par une virgule
        If Asc(e.KeyChar) = 46 Then e.KeyChar = ","
        'si c'est une virgule et qu'il y en a déja une dans le textbox, ou qu'elle est tappé en premier caractère, on annule la saisie
        If Asc(e.KeyChar) = 44 And (CType(sender, TextBox).Text.IndexOf(",") > 0 Or CType(sender, TextBox).Text = "") Then e.Handled = True
        'si le caractere n'est pas un chiffre, back ou une virgule, on annule
        If Char.IsDigit(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back And Asc(e.KeyChar) <> 44 Then e.Handled = True
    End Sub

Conclusion :


je sais que c 'est simple, mais en considérant que je me suis fait c**** à trouver comment faire, je me dis que ca pourra en aider d'autres.

A voir également

Ajouter un commentaire

Commentaires

cs_Falk
Messages postés
31
Date d'inscription
dimanche 16 mars 2003
Statut
Membre
Dernière intervention
19 avril 2003
-
Vraiment Simpa ta source, dans le cadre de mon convertisseur Euros j'avais "bidouillé en testant si ma valeur d'entrée était de type Numérique (If Not IsNumeric(txtTaux.Text) Then...), ta solution semble plus fiable merci =)
LittleKeichi
Messages postés
6
Date d'inscription
mercredi 27 novembre 2002
Statut
Membre
Dernière intervention
25 novembre 2011
-
Kler ke c simpa moi aussi je me suis fé c**** comme tu dis et pis finalement j'avais tjrs po de soluce. Donc un franc Merci s'impose :)
À la revoyure !
cs_666Ange
Messages postés
19
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
2 mars 2009
-
Merci pour le e.handled = true !!!
cs_Benouille
Messages postés
216
Date d'inscription
jeudi 24 octobre 2002
Statut
Membre
Dernière intervention
7 septembre 2007
1 -
pas mal le e.handled = true ...
faut que je teste ça!

par contre c'est louche ton " e.KeyChar.IsLetter(e.KeyChar) "
ça semble bizarre d'appeler une fonction avec lui même en parametre.

monobjet.mafonction (monobjet) ... chelou

je suppose que c'est une réminiscence de l'héritage ...



tite dernière question taquine, si on fait un copié collé dans ton textbox, s'passe quoi?


vb nouille, 4 ans plus tard
hvb
Messages postés
939
Date d'inscription
vendredi 25 octobre 2002
Statut
Membre
Dernière intervention
27 janvier 2009
1 -
effectivement, e.KeyChar.IsLetter(e.KeyChar) est à remplacer par Char.IsLetter(e.KeyChar)
Le code date de 4 ans, j'apprenais la POO par tatonnement... ^^

Par contre pour ta "question taquine", effectivement, elle taquine... il faudrait penser à empecher le copier coller, qui peut tout faire exploser.
Je n'ai pas le temps de regarder tout de suite, mais on doit pouvoir ruser assez facilement.
Merci de tes remarques :)

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.