Utiliser l'orienté objet pour cibler un ensemble de composant du meme type

cs_hmedjojo Messages postés 11 Date d'inscription lundi 10 novembre 2003 Statut Membre Dernière intervention 12 mars 2009 - 14 févr. 2009 à 04:52
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 - 12 mars 2009 à 04:57
salut a toutes et a tous.
je voudrai sa voir comment utiliser l'orienté objet pour donner l'instruction de vider toutes les textbox presents sur mon formulaire en se basant sur leur type pour les vider. genre "Control.textbox.clear()" !?.
merci.

blaze

10 réponses

WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
15 févr. 2009 à 08:55
Salut,

Je pense que le seul moyen est de parcourir tout tes controles dans ton formulaire un par un et d'effacer le texte si c'est une textbox.

e.g.

foreach(Control c in this.Controls)
{
   TextBox txt = c as TextBox;
  if(txt != null) // le control est une textbox
    txt.Clear();
}

C'est l'idée de base. Après, si tes textboxes sont dans un panel/groupbox autre, il faudra sans doute un peu de récursivité.
0
cs_hmedjojo Messages postés 11 Date d'inscription lundi 10 novembre 2003 Statut Membre Dernière intervention 12 mars 2009
15 févr. 2009 à 21:54
Merci l'ami. c'est  impeccable pour moi.

blaze.
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
15 févr. 2009 à 23:39
Curieux de savoir si

foreach(Control c in this.Controls)
{
   if(c is TextBox)
    ((TextBox)c).Clear();
}

est plus rapide ou pas :p
0
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
15 févr. 2009 à 23:46
Je crois qu'utiliser as est plus rapide.
0

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

Posez votre question
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
15 févr. 2009 à 23:52
Tiens, regarde la
0
cs_hmedjojo Messages postés 11 Date d'inscription lundi 10 novembre 2003 Statut Membre Dernière intervention 12 mars 2009
16 févr. 2009 à 00:33
Peut etre que c plus rapide mais la seconde forme :

foreach(Control c in this.Controls)
{
   if(c is TextBox)
    ((TextBox)c).Clear();
}

me parrait plus intuitive comme construction.
Merci.

blaze
0
cs_hmedjojo Messages postés 11 Date d'inscription lundi 10 novembre 2003 Statut Membre Dernière intervention 12 mars 2009
16 févr. 2009 à 01:09
Apres consultation de la page traitant sur les casts il est donc meilleur d'un point de vu performance d'utiliser l'opérateur as et éviter le downcasting car il est couteux.

blaze
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
16 févr. 2009 à 11:21
Très interressant.

J'ai toujours pensé que le cast ((type)objet) était plus rapide que (objet as type), pour la simple et bonne raison qu'en C, ce type de casting est en fait totalement transparent: on manipule un pointeur. Que ce soit un pointeur de toto ou de titi, on s'en fout, ca reste un int32. Je me suis dit qu'en interne, en C# ca devait faire pareil.

Grosse erreur; puisque le downcast c# effectue tout un bordel pour possiblement lancer une exception de type InvalidCastException.

Bon à savoir.
0
cs_hmedjojo Messages postés 11 Date d'inscription lundi 10 novembre 2003 Statut Membre Dernière intervention 12 mars 2009
12 mars 2009 à 03:30
salut tout le monde,
je voudrai savoir comment cette fois ci vider mes textbox quelque soit leurs emplacements. Je m'explique: quand le textbox est directement l'enfant du winform ca marche avec la methode suivante:

foreach(Control c in this.Controls)
{
   if(c is TextBox)
    ((TextBox)c).Clear();
}
 mais quand le textbox se trouve sur un tabcontrol par exemple ça ne marche plus car il n'est plus atteint . donc les Controls c traversés par le foreach n'englobent que les controls de "premier niveau". ce que je veux , c de pouvoir traverser tout les controls contenus dans le winform meme s'ils sont imbriqués l'un dans l'autre comme dans certains cas.
Merci pour votre partage et vos dons de connaissance.
blaze
0
WishhhMaster Messages postés 327 Date d'inscription mardi 17 février 2004 Statut Membre Dernière intervention 10 avril 2010 8
12 mars 2009 à 04:57
Tu n'as pas trop le choix, tu dois parcourir tous tes controles recursivement.
Si tu n'as pas trop de controles, tu devrais sans doute le faire manuelement.
0