Interdire du Texte dans une TexBox??

Résolu
anthonycosson Messages postés 106 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 20 novembre 2009 - 9 mars 2006 à 16:55
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 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.

8 réponses

cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 mars 2006 à 18:56
Microsoft vous aime Messieurs, c'est pour cela qu'ils ont ajoutés un Control fort intéressant : le NumericUpDown !


<hr>[/auteurdetail.aspx?ID=13319
[Pub] ][auteurdetail.aspx?ID=13319 http://www.csharpfr.com/auteurdetail.aspx?ID=13319] [\Pub]
C# forever
3
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
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 :

protected : void WndProc(System::Windows::Forms::Message __gc * msg)
{

if (msg->Msg == WM_PASTE)
{

__super::WndProc(msg);
for (int i = 0 ; i <this->Text->get_Length();i++)
{
if ((this->Text->get_Chars(i) != '.') && (this->Text->get_Chars(i) != ','))
{
if (Char::IsNumber(this->Text->get_Chars(i)) == false)
{
this->Text = "0" ;
this->SelectionStart = 1 ;
}
}
}
}
else
__super::WndProc(msg);

}

Je te conseil de derivé un textbox de la modifier, comme ca tu pourras t'en servir autant que fois que nécessaire.
0
gyzmo222 Messages postés 66 Date d'inscription lundi 27 juin 2005 Statut Membre Dernière intervention 2 juin 2006 1
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
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
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#
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
anthonycosson Messages postés 106 Date d'inscription mercredi 30 mars 2005 Statut Membre Dernière intervention 20 novembre 2009
9 mars 2006 à 17:22
OK merci pour votre rapidité et vos réponse
Mais je n'arrive pas écrire cette ligne C++en C#
String * selection = this->get_SelectedText() ;

je tape ça sans succes: String selection = TexBox1.get_SelectedText() ;

.get_SelectedText() est introuvabe.
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
9 mars 2006 à 17:24
TextBox1.Text je pense



Mx
MVP C#
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
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.
0
cs_emmanuel9 Messages postés 903 Date d'inscription mercredi 23 février 2005 Statut Membre Dernière intervention 16 juin 2010 2
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) ;

String * resultat = this->Text ;
String * resultat1 = resultat->Replace('.',virgule) ;
String * resultat2 = resultat1->Replace(',',virgule) ;

if (this->Text->CompareTo("") != 0)
return Convert::ToDecimal(resultat2, new CultureInfo(CultureInfo::CurrentCulture->ToString(),true)) ;
else
return 0 ;

}
0
Rejoignez-nous