TextBox / NumericUpDown

Résolu
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 13 mai 2005 à 10:21
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 13 mai 2005 à 12:08
Bonjour,


J'ai créée une méthode récursive qui me premets de prendre tous les controls d'un sous control et d'y faire une certaine opération. En l'occurance, je m'intéresse seulement au textBox, et donc je fais un test avec le mot clef 'as' (j'ai aussi essayé avec 'is') pour savoir si le control actuel que je test est une textbox. Seulement voila, à ma grande surprise, il n'y a pas seulement les textBox qui passent le filtre, mais aussi les numericUpDown. Pourtant, ces classes n'ont rien en commun, si ce n'est qu'elle dérive les deux de la class Control... (pour être sur, j'ai setté le backColor à Red, et tout les Controls rouge de ma form sont bien les Textbox et les NumericUpDown).


Comment faire pour avec uniquement les TextBox? (j'aimerais pas devoir faire un test sur le nom du Control, ou sur une property similaire (tag)).

Merci aux réponses.

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever

9 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
13 mai 2005 à 11:25
C'est parce que le NumericUpDown est une collection de controls, dont un TextBox.

Donc forcément, avec ca : if(c.HasChildren) ClearAll(c);

Ca fait comme si il décomposait Control par Control... Et la textbox du NumericUpDown elle se colorise.

Regarde avec le mode pas a pas, tu verras comment ca agit



(Je vois pas d'autres explications)



Mx
3
cs_RMI Messages postés 305 Date d'inscription vendredi 18 juillet 2003 Statut Membre Dernière intervention 2 août 2010 2
13 mai 2005 à 10:36
Tu es sur de faire un truc comme ci-dessous

foreach (Control control in myForm.Controls)

{

if (control is TextBox)...

if (control is NumericUpDown)...
}
Théo
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 mai 2005 à 10:38
Absolument certain !

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
13 mai 2005 à 10:56
J'ai essayé de mettre un TextBox et un NumericUpDown sur ma form, et
avec ce bout de code, ca marche (que les textbox qui sont colorées)



foreach(Control c in this.Controls)

if(c is TextBox) c.BackColor = Color.Red;




Il ressemble a quoi ton code exactement ?


Mx
0

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

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 mai 2005 à 11:01
je suis du meme avis que Morpion... ca marche super bien pour moi :\

Sébastien FERRAND

Blog :
http://blogs.developpeur.org/sebmafate</FO< body>
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 mai 2005 à 11:18
Alors peut-être que ça vient du fait quoi ma méthode est déclarée statique (je verrais pas pourquoi) ?
Voici ce que j'ai fais :

public
static
void ClearAll(Control cont)
{

foreach(Control c
in cont.Controls)
{

if(c.HasChildren) ClearAll(c);

else
{

if(c
is TextBox) // aussi essayé avec 'as', le cast fonctionne !
{
((TextBox)c).BackColor = Color.Red;
}
}
}
}



private
void Form1_Load(
object sender, System.EventArgs e)
{
// Remarnque : this est ma form actuelle
ClearAll(
this);
}

Les seuls controls mis en couleur sont les textbox et les numericUpDown.
Pas chez vous ?

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 mai 2005 à 11:31
Bien vu Mx!
(J'ai pas pensé qu'un NumericUpDown était composé d'une textBox )

Pour corriger, j'ai rajouté cette ligne (première ligne du foreach) :

if(c is NumericUpDown) continue;

Now ça fonctionne.
Merci.

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
13 mai 2005 à 11:32
c'est une explication qui me plait bien...

il faut que tu modifies ton code comme ceci :
public static void ClearAll(Control cont)
{
foreach(Control c in cont.Controls)
{
if(c.HasChildren && !(c is NumericUpDown)
) ClearAll(c);
else
{
if(c is TextBox) // aussi essayé avec 'as', le cast fonctionne !
{
((TextBox)c).BackColor = Color.Red;
}
}
}
}

private void Form1_Load(object sender, System.EventArgs e)
{
// Remarnque : this est ma form actuelle
ClearAll(this);
}

Sébastien FERRAND

Blog :
http://blogs.developpeur.org/sebmafate</FO< body>
0
cs_Bidou Messages postés 5486 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
13 mai 2005 à 12:08
Oui merci, j'ai tout de suite pu corriger quand j'ai compris qu'un NumericUpDown était composé d'une TextBox !

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
0
Rejoignez-nous