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.NET Discussion :

Restriction TextBox VB.NET


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 10
    Par défaut Restriction TextBox VB.NET
    ( Je n'ai pas trouvé de section Présentation, alors je poste directement ma question. )

    Bonjour,

    Je sais que ce sujet a été maintes fois abordé, mais si je me permet de poster c'est que les réponses glanées sur le net ne m'ont pas aidé.

    J'aimerai qu'une TextBox n'accepte que les chiffres de 0 à 9, les touches Virgule, Backspace et Delete.

    Dans ce post, les réponses sont du genre "Lis le cours VB.NET (de Philippe Lasserre)" ou "On va pas le faire à ta place !"

    Je l'ai donc lu et j'ai trouvé une technique qui fonctionne parfaitement, adaptée a mes demandes cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
            If e.KeyChar <> "," And e.KeyChar <> "0" And e.KeyChar <> "1" And e.KeyChar <> "2" And e.KeyChar <> "3" And e.KeyChar <> "4" And e.KeyChar <> "5" And e.KeyChar <> "6" And e.KeyChar <> "7" And e.KeyChar <> "8" And e.KeyChar <> "9" Then e.KeyChar = CType("", Char)
        End Sub
    Malheureusement, selon Microsoft, il n'y a pas de codes pour les touches Backspace et Delete.

    De plus, ca fait un "TING" pour le moins énervant à chaque fois qu'on entre une touche non valide.

    Il faudrait donc trouver une autre méthode.

    Je sais par contre que les touches que je cherche à accepter ou refuser ont toutes un code Ascii distinct.

    Seulement je ne comprends pas les différents exemples trouvé par-ci par-là.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub montant_KeyPress(Index As Integer, KeyAscii As Integer)
    'les chiffres 0 à 9 ont les codes ASCII 48 à 57
    '43 est le signe +, 45 est le signe - et 46 est le point .
    If (KeyAscii < 48 Or KeyAscii > 57) _
    And Not KeyAscii = 43 _
    And Not KeyAscii = 45 _
    And Not KeyAscii = 46 Then
    KeyAscii = 0
    End If
    End Sub
    Je recopie ça ( bouh c'est mal je sais ), et je rajoute

    "montant_KeyPress(TextBox1.Text)"

    dans la section

    "Private Sub TextBox1_TextChanged ..."

    Cela donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
            montant_KeyPress(TextBox1.Text)
        End Sub
    Mais je recois une erreur :
    Argument not specified for parameter 'KeyAscii' of 'Private Sub montant_KeyPress(Index As Integer, KeyAscii As Integer)'
    Je suis totalement perdu.

    Si une âme charitable pouvais me donner un coup de main, je lui en serai très reconnaissant !

    Je travail sur Visual Basic 2010.

    Merci d'avance.

    François.

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Pourquoi ne pas utiliser un NumericUpDown ?

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Par défaut
    En ce qui concerne les touches Backspace et autres, cherche du coté de l'évènement KeyDown ... (avec e.handled = true)

    En ce qui concerne l'event KeyPress, tu pourrais faire plus concis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not ",0123456789".Contains(e.KeyChar) Then e.KeyChar = Nothing
    En gros il faut gérer les deux évènements (et ne pas oublier des trucs du genre "678,9,,03" n'est pas un nombre valide)

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    une petite Regex pour analyser le texte saisi sur un "validated" du TextBox, je trouve cela plus fluide et plus rapide que l'analyse de chaque touche frappée.
    Et plus besoin de se soucier des" Backspace et Delete".
    Exemple :
    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
        Private Sub tbRemConsentEuro_Validated(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbRemConsentEuro.Validated
            Dim RemConsentEuros As String = tbRemConsentEuro.Text
            '*** Nettoie tous espaces blancs intempestifs
            RemConsentEuros = System.Text.RegularExpressions.Regex.Replace(RemConsentEuros, "[\s]*", "")
            '*** N'accepte que les integers ou les décimaux avec 3 chiffres derrière la virgule, positifs
            Dim pattern As String
            pattern = "^(([0-9]+)|(([0-9]+)(,)([0-9]{0,3}))?)$"
            If RemConsentEuros = System.Text.RegularExpressions.Regex.Match(RemConsentEuros, pattern).ToString AndAlso RemConsentEuros <> "" Then
                tbRemConsentEuro.Text = RemConsentEuros
            Else
                RemConsentEuros = ""
                tbRemConsentEuro.Text = ""
                tbRemConsentEuro.Focus()
            End If
        End Sub
    La Regex sera à adapter au besoin.

    Après on peut faire aussi un clone du thread de la culture (si française), pour accepter le point comme séparateur décimal, ce qui est bien pratique, tout en gardant la présentation avec la virgule.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2010
    Messages : 10
    Par défaut
    chrismonoye

    Quand je recopie ton code, je change tbRemConsentEuro par TextBox1.

    Ensuite dans

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub

    Je met tbRemConsentEuro_Validated(TextBox1.Text)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    tbRemConsentEuro_Validated(TextBox1.Text)
    End Sub
    Mais j'ai une erreur me disant que les arguments ne sont pas bon.

    Je suis hyper débutant, et j'apprend seul.

    C'est bien, ca permet de travailler quand on veut.

    Mais si on pige pas un truc, y'a personne pour t'expliquer.

    Merci.

  6. #6
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Je pense que ce code devrait t'aller:

    A mettre dans l'évènement KeyPress d'un TextBox:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'on accepte que les chiffres, ainsi que la touche back et la touche virgule (, ou .) sinon on annule
    If Char.IsDigit(e.KeyChar) = False And Asc(e.KeyChar) <> System.Windows.Forms.Keys.Back And Asc(e.KeyChar) <> Asc(",") And _
    Asc(e.KeyChar) <> Asc(".") Then
     
            e.Handled = True
     
    End If

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Citation Envoyé par maxiii Voir le message
    chrismonoye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    tbRemConsentEuro_Validated(TextBox1.Text)
    End Sub
    Mais j'ai une erreur me disant que les arguments ne sont pas bon.
    "validated" demande 2 arguments, sender et e,
    Les deux méthodes ayant la même signature, tu peux mettre ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub tbRemConsentEuro_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles tbRemConsentEuro.TextChanged
            tbRemConsentEuro_Validated(sender, e)
        End Sub
    Mais ça va valider ton TextBox à chaque caractère entré, ce qui n'est pas le but.
    Il faut mettre cette procédure à coté. Elle sera automatiquement appelée, lorsque le Textbox sera quitté.

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    déjà, par intuition, j'abandonnerais le "KeyPress" pour un "validated" ou un validating".
    Après on va regarder. Je dis on, car ceux qui l'ont charié, sont déjà sur le sujet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/02/2010, 15h00
  2. mettre à jour le contenu d'un textbox ASP.net avec javascript
    Par bonagad1 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 17/11/2009, 18h55
  3. textbox + vb.net
    Par quentincabo dans le forum VB.NET
    Réponses: 4
    Dernier message: 06/05/2008, 09h11
  4. Drag n drop textbox(asp.net 2.0) vers un input(text)
    Par yanis7518 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/03/2007, 09h38
  5. Quelle CSS définition pour textbox asp.net ?
    Par mappy dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 29/07/2006, 18h18

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