Textbox numérique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 43 759 fois - Téléchargée 28 fois

Contenu du snippet

Comme cette question revient sans cesse dans le forum, voici comment créer une textbox n'acceptant que des caractères numériques
Ce code est vraiment très simple. Il consiste a "gérer" les entrées clavier dans l'évenement OnKeyPress.

Source / Exemple :


using System;
using System.Drawing;
using System.Windows.Forms;

[ToolboxBitmap(typeof(TextBox))] // Pour avoir un bel icone de Textbox dans la toolbox
public class NumericBox : TextBox
{
	public NumericBox()
	{
	}

	//* Désactiver les 6 lignes suivantes pour permettre le copier / coller */
	private const int WM_PASTE = 0x0302;
	protected override void WndProc(ref System.Windows.Forms.Message m)
	{
		if (m.Msg != WM_PASTE)
			base.WndProc(ref m);
	}

	protected override void OnKeyPress(KeyPressEventArgs e)
	{
		// Si la caractère tapé est numérique
		if (char.IsNumber(e.KeyChar))
		{
			if (e.KeyChar == '²') e.Handled = true; // Si c'est un '²', on gère l'evenement.
			else e.Handled = false; // Sinon, on laisse passer le caractère (On peut omettre cette ligne)
		}
		// Si le caractère tapé est un caractère de "controle" (Enter, backspace, ...), on laisse passer
		else if (char.IsControl(e.KeyChar)) e.Handled = false;
		// Et sinon, on gère toutes les autres touches tapées, et on en fait rien
		else e.Handled = true; 
	}
}

Conclusion :


Le collage dans la textbox est à éviter, sinon il serait possible de coller des caractères non numeriques dedans.
Merci a coq qui avait indiqué dans le forum le bout de code qui permet de le désactiver

A voir également

Ajouter un commentaire

Commentaires

cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
37 -
Euh, pourquoi ne pas utiliser un numericUpDown ?
MorpionMx
Messages postés
3468
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
38 -
Cherche pas a comprendre, c'est une question recurrente, et donc comme ca, plutot que d'avoir a chercher dans le forum où est la solution, on la retrouvera plus facilement.

En plus, comme ca, ca permet d'avoir une bonne base, pour ajouter facilement la gestion des virgules, nb de décimales, etc.
cs_yoannd
Messages postés
313
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
1 -
Heuuuu... dans la dernière version du FrameWork (oui, je sais, pas les versions antérieures), il existe la MaskedTextBox, qui permet de mettre un masque de saisie pour "contrôler" ce que doit entrer l'utilisateur... c'est très pratique si on veut permettre la saisie d'une heure (par exemple) ;)
MorpionMx
Messages postés
3468
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
38 -
Je sais, je sais.
Mais j'ai jamais dit que je voulais reinventer la roue, je donne juste une piste pour ceux qui veulent controler le type de caractère tapé dans leur textbox.
De plus, rien ne dit que les entreprises ayant migrées sur le framework 1.x iront de suite vers le 2.0 .
cs_yoannd
Messages postés
313
Date d'inscription
lundi 7 janvier 2002
Statut
Membre
Dernière intervention
10 août 2011
1 -
Il est vrai, il est vrai :) Je dis pas que tu éinventes la roue et ta source à un intérêt certain... Ceci dit, j'ai posté ce message pour ceux qui seraient passés de la 1.x à la 2.0, qui auraient besoin d'un champ texte "masquable", et qui n'auraient pas remarqué cette petite évolution dans le framework :)

Que la force soit avec toi :)

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.