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

C# Discussion :

limitation des caractéres


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut limitation des caractéres
    bonjour,
    j'ai fait ce code pour limiter des saisies numirique sur un textbox.

    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
     
     private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (!(e.KeyValue >= 48 && e.KeyValue <= 57))
                {
                    e.Handled = true;
                }
            }
            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!(e.KeyChar >= '0' && e.KeyChar <= '9'))
                {
                    e.Handled = true;
                }
     
            }
    j(aimerais pouvoir saisir des chifre avec virgule et remplacer le point par un virgule..

    merci
    merci

  2. #2
    Membre éclairé Avatar de Gregory.M
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    684
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 684
    Par défaut
    bin dans ton keypressed tu fais quelque chose comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    if(e.Keychar == ";")
    {
    montextbox[montextbox.length-1].Value = ".":
    }
    je ne sais plus si il faut le ".Value"


    ou alors tu peux faire à la perte du Focus et tu fais un foreach

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    foeach (char item in montextbox)
    {
    if(item== ";")
    {
    item.Value = ".":
    }
    }

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut
    j'ai modifier mon code, mais j'arrive pas a saisir une virgule ou un point.
    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
     
     private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!char.IsDigit(e.KeyChar))
                    // Tous les caractères non numériques ne sont pas traités sur le TextBox.
                    e.Handled = true;
     
                {
                    // stoque le séparateur décimal du système
                    char Separateur = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
                    // dans le cas de l'ecriture d'un séparateur
                    if ((e.KeyChar == '.') || (e.KeyChar == ','))
                    {
                        // Force l'ecriture du bon séparateur
                        e.KeyChar = Separateur;
                    }
                }
            }
    merci de votre aide

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut
    je vais posé ma question autrement,

    comment je peux saisir que des nombre décimaux "12,5 " dans un textbox .
    merci

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Par défaut
    Si tu essayes de modifier la valeur de la touche appuyée, il faut peut être le faire sur l'événement KeyDown et non KeyPress non ?

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut
    oui c'est vrai j'arrrive pas a modifier ou suprimer ce que j'ai saisie dans le textbox.
    mais qiuand je fait mon code avec KeyDown.
    code :
    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
     
     
    private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (!char.IsNumber(e.KeyChar) && e.KeyChar != ',' && e.KeyChar != '.')
                {
                    e.Handled = true;
                }
                {
                    if (e.KeyChar == ',')
                    {
                        e.KeyChar = '.';
                    }
                }
     
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Windows.Forms.KeyEventArgs' does not contain a definition for 'KeyChar'
    merci

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2004
    Messages : 231
    Par défaut
    Oui c'est une propriété, keydata ou je ne sais plus quoi mais ça ne devrait pas être compliqué en utilisant l'intellisense.

  8. #8
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 193
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 193
    Par défaut
    sur keypress

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if "0123456789".contains(e.keychar) then exit sub
    if e.keychar = "." orelse e.keychar = "," then e.keychar = separateurdecimaldelaculture
    e.keychar=cchar("")
    ( désolé moi je fais du vb mais ca doit etre compréhensible )

    mais de toute facon si on veut le faire très bien c'est plus compliqué que ca, car il faut interdire 2 virgules, l'utilisateur peut sélectionner une partie du texte et en taper d'autre, il peut faire du copier coller, taper des - en plein milieu du texte etc...

    une partie du code de mon textbox : (gentiment traduit en c# par reflector)
    ca ressemble pas à ce que j'ai tapé, meme en vb, mais je fais confiance au compilateur
    c'est un textbox amélioré dans lequel on peut paramétrer si on veut un nombre (min,max,nbdecimales) ou du texte (max caractères, caractères autorisés) et il change la couleur du fond si la saisie est pas valide et y a un booléen pour le dire si la saisie est valide

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    private void KeypressNombre(KeyPressEventArgs e) /// appelée par la sub keypress du textbox
    {
        try
        {
            if (Strings.Asc(e.KeyChar) != 8)
            {
                if (Strings.InStr("0123456789.,-", Conversions.ToString(e.KeyChar), CompareMethod.Binary) == 0)
                {
                    e.KeyChar = '\0';
                }
                else
                {
                    string monTexteAvant = Strings.Left(this.Text, this.SelectionStart);
                    char CaracVirgule = Conversions.ToChar(MyProject.Application.Culture.NumberFormat.NumberDecimalSeparator);
                    if (Strings.InStr("0123456789", Conversions.ToString(e.KeyChar), CompareMethod.Binary) > 0)
                    {
                        if ((this.SelectionStart == 0) & (Strings.InStr(monTexteAvant, "-", CompareMethod.Binary) > 0))
                        {
                            e.KeyChar = '\0';
                        }
                        else if ((Strings.InStr(monTexteAvant, Conversions.ToString(CaracVirgule), CompareMethod.Binary) > 0) && ((Strings.Len(Strings.Mid(this.Text, Strings.InStr(this.Text, Conversions.ToString(CaracVirgule), CompareMethod.Binary) + 1)) - this.SelectionLength) >= this.NombreDecimales))
                        {
                            e.KeyChar = '\0';
                        }
                    }
                    else if ((Conversions.ToString(e.KeyChar) == ".") | (Conversions.ToString(e.KeyChar) == ","))
                    {
                        if (this.NombreDecimales == 0)
                        {
                            e.KeyChar = '\0';
                        }
                        else if (Strings.InStr("0123456789", Strings.Right(monTexteAvant, 1), CompareMethod.Binary) == 0)
                        {
                            e.KeyChar = '\0';
                        }
                        else if ((Strings.InStr(this.Text, Conversions.ToString(CaracVirgule), CompareMethod.Binary) > 0) & (Strings.InStr(this.SelectedText, Conversions.ToString(CaracVirgule), CompareMethod.Binary) == 0))
                        {
                            e.KeyChar = '\0';
                        }
                        else
                        {
                            e.KeyChar = CaracVirgule;
                        }
                    }
                    else if (Conversions.ToString(e.KeyChar) == "-")
                    {
                        if (this.SelectionStart > 0)
                        {
                            e.KeyChar = '\0';
                        }
                        else if ((Strings.InStr(this.Text, "-", CompareMethod.Binary) > 0) & (Strings.InStr(this.SelectedText, "-", CompareMethod.Binary) == 0))
                        {
                            e.KeyChar = '\0';
                        }
                    }
                }
            }
        }
        catch (Exception exception1)
        {
            ProjectData.SetProjectError(exception1);
            Exception ex = exception1;
            Erreur.Trace(ex, this, new object[] { e });
            e.KeyChar = '\0';
            ProjectData.ClearProjectError();
        }
    }


    tu peux aussi laisser passer entrée et echap :

    If Asc(e.KeyChar) = 13 Then Exit Sub ' entrée
    If Asc(e.KeyChar) = 27 Then Exit Sub ' échap


    voici le code original, que je trouve beaucoup plus lisible que la version
    compilée
    c'est un code qui date de l'époque ou j'étais pas encore très calé en .net, pour ca qu'il reste des fonctions étranges du namespace visualbasic, mais la classe string sait faire les meme choses
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
     Private Sub KeypressNombre(ByVal e As System.Windows.Forms.KeyPressEventArgs)
                Try
                    If Asc(e.KeyChar) = 8 Then Exit Sub /// retour arrière
     
                    If InStr("0123456789.,-", e.KeyChar) = 0 Then       /// autorisation des chiffres, des virgules et du moins (3 cas ci après)
                        e.KeyChar = CType("", Char)
                        Exit Sub
                    End If
     
                    /// !!! raisonnement prenant aussi en compte une sélection dans le TextBox !!!
                    Dim monTexteAvant As String
                    monTexteAvant = Microsoft.VisualBasic.Left(Me.Text, Me.SelectionStart)
                    Dim CaracVirgule As Char
                    CaracVirgule = CType(My.Application.Culture.NumberFormat.NumberDecimalSeparator, Char)
     
     
                    /// /\ chiffre tapé /\ 
                    If InStr("0123456789", e.KeyChar) > 0 Then
     
                        If Me.SelectionStart = 0 And InStr(monTexteAvant, "-") > 0 Then /// si on est au début et qu'il y a un moins, on ne laisse pas taper un chiffre avant !
                            e.KeyChar = CType("", Char)
                            Exit Sub
                        End If
     
                        /// gestion du nombre de décimal si on vient de taper un chiffre
                        If InStr(monTexteAvant, CaracVirgule) > 0 Then ///  regarde s'il y a une virgule avant le chiffre tapé
                            If Len(Mid(Me.Text, InStr(Me.Text, CaracVirgule) + 1)) - Me.SelectionLength >= NombreDecimales Then
                                /// = si nombre de chiffre après la virgule est deja au max alors on en rajoute plus (on ne compte pas ceux qui sont sélectionnés et qui seront supprimés)
                                e.KeyChar = CType("", Char)
                                Exit Sub
                            End If
                        End If
     
                        /// reste chiffre et on autorise
                        Exit Sub
                    End If
     
     
                    /// /\ virgule tapée /\
                    If e.KeyChar = "." Or e.KeyChar = "," Then
     
                        If NombreDecimales = 0 Then  /// si on autorise 0 décimales alors meme pas de virgule ... forcément ...
                            e.KeyChar = CType("", Char)
                            Exit Sub
                        End If
     
                        If InStr("0123456789", Microsoft.VisualBasic.Right(monTexteAvant, 1)) = 0 Then /// virgule autorisée seulement si c'est un chiffre placé avant
                            e.KeyChar = CType("", Char)
                            Exit Sub
                        End If
     
                        If InStr(Me.Text, CaracVirgule) > 0 And InStr(Me.SelectedText, CaracVirgule) = 0 Then
                            /// interdiction s'il y a deja une virgule dans le TextBox  et  pas dans la sélection
                            e.KeyChar = CType("", Char)
                            Exit Sub
                        End If
     
                        /// virgule autorisée (et transformée)
                        e.KeyChar = CaracVirgule ///  on vient de taper une virgule et on a le droit alors on sort
                        Exit Sub
                    End If
     
     
                    /// /\ [moins] tapé /\
                    If e.KeyChar = "-" Then ///  gestion du moins
     
                        If Me.SelectionStart > 0 Then  ///  si on est pas au début de la zone de saisie on sort
                            e.KeyChar = CType("", Char)
                            Exit Sub
                        End If
     
                        If InStr(Me.Text, "-") > 0 And InStr(Me.SelectedText, "-") = 0 Then /// interdiction s'il y a deja un moins dans le TextBox  et  pas dans la sélection
                            e.KeyChar = CType("", Char)
                            Exit Sub
                        End If
     
                        /// moins autorisé
                        Exit Sub
                    End If
     
                Catch ex As Exception
                    Erreur.Trace(ex, Me, e)
                    e.KeyChar = CChar("")
                End Try
            End Sub
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre confirmé
    Inscrit en
    Avril 2008
    Messages
    79
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 79
    Par défaut
    merci les amis, j'ai fait autrement et ca marche, voila le code si quelqu'un a le même galére que moi,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!char.IsNumber(e.KeyChar) && e.KeyChar != ',' && e.KeyChar != '.' && e.KeyChar != 8) //8 = backspace
                {
                    e.Handled = true;
                }
                else if (e.KeyChar == ',')
                {
                    e.KeyChar = '.';
                }
            }
    merci

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

Discussions similaires

  1. [PHP 5.3] Var_dump limite des caractères
    Par j0hn01 dans le forum Langage
    Réponses: 4
    Dernier message: 14/05/2012, 15h43
  2. Limite des 218 caractères dans un nom de fichier
    Par Didier Gonard dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/02/2008, 14h28
  3. Limite des zone d'édition a 255 caractére ?
    Par Arkencia dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/01/2008, 14h59
  4. RegExp des caractères alphanumériques limités
    Par witch dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/12/2007, 00h09
  5. CComboBox::Limiter la Saisie des caractères
    Par bizulk dans le forum MFC
    Réponses: 6
    Dernier message: 13/09/2005, 15h42

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