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 :

Saisie controlée TextBox (type double) [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    Bonjour ,

    J'ai un petit soucis concernant la saisie controlé de mon TextBox , j'ai cherché sur internet pour comment faire pour que la TextBox n'accepte que des chiffres et j'ai trouvé grace à l'évenement KeyPress

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if (!Char.IsControl(e.KeyChar) && !Char.IsDigit(e.KeyChar))
        {
            e.Handled = true;
        }

    le soucis c'est que je ne peux pu saisir de virgule est ce que quelqu'un pourrait m'expliquer comment faire afin que je puisse le faire.

    Je souhaiterai savoir aussi à quoi correspond le e pour e.KeyChar ?

    Merci

    [EDIT]
    J'ai trouvé comment faire avec e.Keychar != ',' mais j'aimerai toujours savoir à quoi correspond le e .
    Si vous avez une méthode plus pertinente je suis preneur aprés en cours on a opté pour un TextBox meme si moi j'aurai plutot pour un NumericUpDown si je me trompe pas à déjà les controles prévu à cet effet?

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    en effet même avec plusieurs dizaines lignes de code le textbox n'arrivera pas au niveau du numericupdown qui est prévu pour de la saisie de nombre
    car même si tu filtre le keypress, l'utilisateur peut toujours faire coller (de copier/coller) faire un bout de selection puis clic droit/supprimer etc ... ce qui fait que le contenu ne sera plus forcément un nombre

    concernant e : http://www.developpez.net/forums/d71...t/#post4157798
    c'est en vb.net, mais c'est le même principe que c#, seule la syntaxe change
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    en effet le NumericUpDown pourrait être plus adapté (ou bien un MaskedTextBox)

    quant au "e" (qui pourrait avoir n'importe quel nom en fait) c'est le second argument de ton gestionnaire évènement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void TextBox_Keypress (object sender, KeyPressEventArgs e)
    en gros les gestionnaires d'évènements ont à peu près toujours cette structure là (avec le type de e qui varie mais le plus souvent a pour type une classe héritant de EventArgs)
    le premier argument (couramment nommé sender) représente l'objet qui a déclenché l'évènement (donc ici ton TextBox)
    le second argument représente les informations liés à l'évènement (position de la souris pour un clic, caractère appuyé pour un keypress, etc.)

    Le mieux reste de lire la documentation pour savoir le détail spécifique à chaque évènement

    Quant à comment "mieux" gérer, sachant que le "mieux" c'est relatif ; personnellement, je n'aime pas trop l'approche Keypress, en l'état tu ne peux empêcher la saisie de plusieurs séparateurs décimaux si tu te contentes d'accepter le caractère dans ton KeyPress ; il te faudra donc rajouter des conditions ; puis après il te faudra gérer le - pour un nombre négatif puis le e ou E pour la notation scientifique (je me doute que tu n'as pas tous ces cas à gérer mais tu pourrais )
    Pour moi, je préfère laisser l'utilisateur taper ce qu'il veut (il est grand normalement) et utiliser Validating (qui est un peu fait pour ça) pour que quand il a fini de saisir (donc a priori ça lui convient à l'utilisateur), on vérifie l'intégralité de la saisie (ce qui se résume à faire un double.TryParse), si ça a marché on a déjà récupéré sa saisie en tant que nombre au moins c'est déjà fait et si ça n'a pas fonctionné on peut lui dire "oh là c'est pas bon ça recommence" (à l'aide d'une MessageBox, d'une infobulle, d'une barre de statut, etc. ça c'est pas important) et remettre le focus dans la textbox comme ça il est "coincé" dedans tant qu'il a pas saisi un truc correct (peut-être juste penser à le laisser sortir si la textbox est vide s'il veut s'occuper de remplir autre chose avant [mais dans ce cas faudra penser à gérer le fait qu'il est laissé la case vide quand il valide le tout (clic d'un bouton pour faire les calculs etc.)])

    Je te renvoie à la documentation de l'évènement Validating (et Validated) qui a un bon exemple de ce type d'approche (c'est pour valider un mail mais le principe est le même)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 189
    Points : 68
    Points
    68
    Par défaut
    Merci pour vos réponses .
    le TextBox concerné sert pour saisir un prix et ensuite c'est ajouté dans une base de donnée , j'ai donc opté pour un Double TryParse pour vérifier la valeur comme tu l'as dis Sehnsucht et si c'est incorrect l'ajout ne se fait pas aprés le KeyPress j'ai laissé au moins y'a que aux touches numériques et la virgule et les controles pour ce TextBox meme si c'est pu vraiment utile car y'a le test avec le TryParse mais bon c'est pas vraiment dérangeant aux moins il accés que aux touches numériques , ',' et les controles mais comme tu l'as dis l'utilisateur est assez grand pour savoir ^^

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

Discussions similaires

  1. controle saisie numerique textbox
    Par Hepil dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/07/2010, 16h26
  2. controles de saisi de textbox
    Par jbggg dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/11/2009, 14h50
  3. Controle saisie sur TextBox
    Par Addict` dans le forum Windows Forms
    Réponses: 1
    Dernier message: 08/04/2009, 17h22
  4. [C#] Je veux formater un control textBox
    Par justice007 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 28/05/2004, 11h51
  5. [LG]Convertir le type double en string
    Par @tom@ dans le forum Langage
    Réponses: 8
    Dernier message: 18/01/2004, 19h20

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