anthonycosson
Messages postés106Date d'inscriptionmercredi 30 mars 2005StatutMembreDernière intervention20 novembre 2009
-
9 mars 2006 à 16:55
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 2013
-
11 mars 2006 à 18:56
Bonjour a tous,
Comment interdire dans une TextBox la frappe de caractère et autoriser seulement les chiffres?
Je travaille dans un projet smartappllication sous visual studio 2003.
Je pense orienter mes recherches vers les événements qu'en pensez-vous?
Merci d'avance de votre aide trés chère à mes yeux.
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 9 mars 2006 à 17:04
Oui les événements, je crains que tu ne puisses y couper :
Voici un exemple en c++ managé (pareil que le c# remplace les -> par des . et les :: par des .)
// cet événement s'execute quand le text du textbox est modifié
private: System::Void Derive_Textbox_VirguleControl_KeyPress(System::Object * sender, System::Windows::Forms::KeyPressEventArgs * e)
{
// si dans le texte qu'on selectionne se trouve une virgule alors nb_virgule passe à 0
// comme ca on peut taper directement une virgule
String * selection = this->get_SelectedText() ;
for (int i = 0 ; i <selection->get_Length();i++)
{
if ((selection->get_Chars(i) '.') || (selection->get_Chars(i) ','))
{
nb_virgule = 0 ;
}
}
// si le caractère tapé est different de la virgule alors on bloque tout sauf les nombres
if ((e->get_KeyChar() != '.') && (e->get_KeyChar() != ','))
{
if (Char::IsNumber(e->KeyChar)) e->Handled = false;
else
if (Char::IsControl(e->KeyChar)) e->Handled = false;
else
e->Handled = true;
}
// si le nombre de virgule rentré est superieur ou égal à 1 alors on bloque
else
{
if (nb_virgule>=1)
e->Handled = true ;
else
e->Handled = false ;
}
}
Si c'est pour rentrer des nombres decimaux il faut verifier que une seule virgules est entré.
D'un autre coté il faut que tu verifies également que si on fait un coller dans ton textbox la verification se fasse aussi :
gyzmo222
Messages postés66Date d'inscriptionlundi 27 juin 2005StatutMembreDernière intervention 2 juin 20061 9 mars 2006 à 17:07
Tu fais un int.parse ou une expression régulière [0-9] sur ta textbox lors de sa validation et tu affiche un message d'erreur si les conditions ne sont pas remplies
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 9 mars 2006 à 17:19
Voila en gros ce que te donnais emmanuel9 convertit en C# -> ici Sinon, la méthode de l'expression reguliere est certainement meilleure, si tu as besoins de ne faire ce traitement qu'à la validation (mais evite le int.parse par contre)
Mx
MVP C#
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 9 mars 2006 à 17:57
Ben ca code sert lors d'une selection pour controler que le nb de virgule est tjs égal à 1. normalement tontextbox.SelectedText devrais exister, sinon je te conseil le code proposé par MorpionMx qui te sera surement plus utile dans un premier temps.
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 9 mars 2006 à 18:02
D'ailleurs il faut que la nombre que tu va retourner correspond, la virgule contenu dedans corresponde à la virgule qu'il y a dans paramètre regionaux sous windows. J'ai dérivé un textbox et j'ai ecris une fonction qui permet de faire cela. Mon textbox accepte les "," et les ".". En faite je prend ma chaine par exemple "3,14159", et je remplace le "," par la culture regional. Si le textbox est vide je retourne un "0" sinon je retourne le nombre.
public : Decimal r_decimal()
{
CultureInfo * regional = new CultureInfo(CultureInfo::CurrentCulture->ToString(),true);
String * p = regional->NumberFormat->get_NumberDecimalSeparator() ;
__wchar_t virgule = Convert::ToChar(p) ;