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

Windows Forms Discussion :

[C#]Gestion clavier d'un textbox


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Points : 64
    Points
    64
    Par défaut [C#]Gestion clavier d'un textbox
    Bonjour,

    J'ai un textbox qui ne peut recevoir que du numérique sous forme décimale.
    J'ai déjà le code me permettant que n'autoriser que les touches numériques ainsi que la virgule et le point:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (!char.IsDigit(e.KeyChar))
        if (e.KeyChar == (char)44 || e.KeyChar == (char)46)
        {
    	e.Handled = false;
        }
        else e.Handled = true;
    Mais comment avec le code remplacer le point du pavé numérique par la virgule ?

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Points : 132
    Points
    132
    Par défaut
    Avec la méthode Relace de la classe String

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //exemple
    string donnee = "150.5";
    donnee = donnee.Replace('.', ',');
    Pour ta situation, je testerais d'abord le membre KeyChar.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (e.KeyChar == '.')
         //Alors mettre une 'virgule'

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Points : 64
    Points
    64
    Par défaut
    Merci pour ta réponse OxyG3n3.
    Mais la propriété KeyChar est en lecture seule et donc impossible de lui faire faire dans l'événement KeyPress:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (e.KeyChar == '.') e.KeyChar = ',';
    Aussi j'ai essayé ta proposition avec la méthode Replace que j'ai placé dans un événement Validating mais je ne sais pourquoi cela ne fonctionne pas.
    Mon textbox s'intitule tbxChiffre.
    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void tbxChiffre_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        string sMot = tbxChiffre.Text;
        sMot.Replace('.', ',');
        tbxChiffre.Text = sMot;
    }

  4. #4
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par Mictou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void tbxChiffre_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        string sMot = tbxChiffre.Text;
        sMot.Replace('.', ',');
        tbxChiffre.Text = sMot;
    }
    Les strings sont immutable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tbxChiffre.Text = sMot.Replace('.', ',');

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Points : 64
    Points
    64
    Par défaut [Résolu]
    merci mehdi_tn.
    Effectivement, cela fonctionne.
    Mais je ne connais pas cette propriété "immutable" qui est traduite par "immuable" en français.
    Je n'en comprends pas bien le sens en terme de programmation.

  6. #6
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Citation Envoyé par Mictou
    Mais je ne connais pas cette propriété "immutable" qui est traduite par "immuable" en français.
    Je n'en comprends pas bien le sens en terme de programmation.
    Oops désolé je croyais que immutable était du francais aussi

    Les Strings en .Net sont "immuables", cela veut dire que à chaque changement à un string, le runtime crée un nouveau string et abondonne l'ancien. un exemple ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    string s;
     
    s = "toto";          // "toto"
    s += " momo";      // "toto momo"
    s += " popo";       // "toto momo popo"
    Ici 3 strings sont alloués. les 2 premieres references sont dispoées par le garbage collector.

    Pour eviter ce probleme, il existe une alternative, le StringBuilder qui est mutable ou muable enfin tu comprends ce que je veux dire

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Points : 64
    Points
    64
    Par défaut
    Oui, maintenant je comprends très bien cette propriété.
    Rien de tel qu'un exemple bien choisi pour sa simplicité pour expliciter les choses.

  8. #8
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Bonjour,

    Comme le dit medhi, à chaque fois que tu modifies une variable String, une nouvelle instance est renvoyée.

    Ton code est correcte, dans le fond, sauf qu'il y a une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void tbxChiffre_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        string sMot = tbxChiffre.Text;
        sMot.Replace('.', ',');
        tbxChiffre.Text = sMot;
    }
    Replace est une fonction qui te renvoi une nouvelle instance de String.
    Tu oublies juste de réaffecter ta valeur à ta variable.

    Cela est plus correcte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    private void tbxChiffre_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        string sMot = tbxChiffre.Text;
        sMot = sMot.Replace('.', ',');
        tbxChiffre.Text = sMot;
    }
    Ceci est encore plus correcte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void tbxChiffre_Validating(object sender, System.ComponentModel.CancelEventArgs e)
    {
        tbxChiffre.Text = tbxChiffre.Text.Replace('.', ',');
    }

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

Discussions similaires

  1. Gestion "clavier/envoi vers le serveur" en multijoueur
    Par hedo888 dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 20/04/2007, 10h27
  2. Gestion clavier souris en multijoueurs
    Par billynirvana dans le forum Développement 2D, 3D et Jeux
    Réponses: 15
    Dernier message: 28/12/2006, 17h12
  3. Gestion clavier dans une form avec dbgrid
    Par albedo dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/04/2006, 15h42
  4. [GLUT] Gestion clavier, touches concurentes
    Par djfab dans le forum OpenGL
    Réponses: 9
    Dernier message: 04/05/2005, 00h25
  5. [Delphi]Gestion Clavier
    Par Dr@ke dans le forum GLUT
    Réponses: 2
    Dernier message: 26/02/2005, 14h13

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