Controle Utilisateur Problème SplitContainer

scottmat Messages postés 438 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 23 janvier 2011 - 1 mars 2007 à 15:22
scottmat Messages postés 438 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 23 janvier 2011 - 2 mars 2007 à 16:56
Bonjours à tous et à toutes,



J’ai créé un contrôle utilisateur et souhaiterai ré-analyser tous les contrôles de ce ‘moule’



Pour cela ces 3 lignes de code :



foreach
(UserControl1  oControle in  this.Controls)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>






           

{






               
MessageBox.Show(oControle.Name);






            }



Mais j’ai un SplitContainer dans mon projet, enfin ma feuille et il m’affiche cette erreur :




Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.SplitContainer' en type 'Projet1.Control'.






Alors que sans SplitContainer sa marche sans souci !



Que dois-je faire ? Dois-je me passer de ce contrôle ou puis-je contourner ce problème ?
Merci par avance ;)

9 réponses

Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
1 mars 2007 à 17:40
Tous les controls ne sont pas forcément des "UserControl1" (c'est le cas du split container par exemple).


Si tu veux lister tous les controles de ton user control :


foreach(Control control in this.Controls) // this = le user control que tu analyse

{

    MessageBox.Show(control.Name);

}


Si tu ne veux lister que les "UserControl1" de ton user control :


foreach( Control control in this.Controls) // this = le user control que tu analyse


{

    if(control Is UserControl1)

    {


        MessageBox.Show(control.Name);

    }


}
0
scottmat Messages postés 438 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 23 janvier 2011 1
1 mars 2007 à 22:54
non non ! j'aurai du mettre

UserControl. je fais référence à la Class et non à un objet créer par cette Class. mon programme avec ces 3 lignes de code 'sélectionne' les composants de type UserControl (Ma Class) en comparent tous les objets dans la Form1
j'ai créer d'autre projet pour tester et ce code ne marche que si TOUS les objets sont du même type !
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
2 mars 2007 à 08:58
Oui, mais quand tu fais "this.Controls", ca te renvoie des "Control". Parmis ces controls, il y a tes UserControl (qui hérite de "Control"), ton SplitContainer (qui hérite aussi de "Control"), etc.

Si tu mets directement "UserControl" dans le foreach, tu cast explicitement tous les "Control" en "UserControl" -> quand arrive le tour du split container, ca plante (puisque le cast ne peut pas etre fait).

Donc il faut faire comme j'ai mis : un foreach sur des Controls, et ensuite a l'interieur, tester si c'est un UserControl ou autre chose...

En résumé : si tu fait un foreach sur "this.Control", tu ne peux pas "filtrer" ce que tu veux que le foreach va te renvoyer. Il te renverra tous les Controls. Ensuite c'est a toi de filtrer a l'interieur pour ne traiter que les "Control" qui t'interresse.
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
2 mars 2007 à 09:00
"ce que tu veux que le foreach va te renvoyer" -> pas très français tout ca, sorry ^^
0

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

Posez votre question
scottmat Messages postés 438 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 23 janvier 2011 1
2 mars 2007 à 14:39
j'ai du mal à saisir ! Excuse-moi
je débute en objet, mais je pense avoir compris ce que tu voulais dire. Mais j'ai beau mettre du code dans ma boucle, c'est la boucle qui plante !
et quand this je le remplace par le nom de ma class sa plante, il me dit que c'est un type utilisé comme variable, donc bien sur imcompatible
encore dsl pour être aussi long à comprendre :s
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
2 mars 2007 à 14:53
Tu n'as pas à t'excuser, on a tous débuté un jour et ce forum est là pour ça :)

Si j'ai bien compris ce que tu veux faire :
- Tu as créer ton propre UserControl
- Tu as mis des controls à l'interieur
- Tu veux afficher le nom des controls que tu as mis à l'interieur

C'est bien ça ?
Si oui :
Où as tu mis le code que tu montrais au début du message ? dans le code du UserControl ? ailleur ?
Peut tu mettre copier ici la partie de code qui plante + le message d'erreur ? (si différent de celui de ton message initial)
0
scottmat Messages postés 438 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 23 janvier 2011 1
2 mars 2007 à 16:13
non lol excuse je n'ai pas du bien m'expliquer
En fait j'ai créer un objet (par une Class)
j'ai donc mes propre objets sur ma form il y'en à plusieurs et sur cette form il y'a également des objets standard (du style Button, Label, etc...) et je voudrais tout simplement en click détecter et accéder à tous MES objets et seulement mes objets créer par ma Class
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
2 mars 2007 à 16:44
Hum c'est quoi un object pour toi?
J'ai l'impression que tu confonds les termes

<hr />
-Blog-
0
scottmat Messages postés 438 Date d'inscription samedi 24 mai 2003 Statut Membre Dernière intervention 23 janvier 2011 1
2 mars 2007 à 16:56
un Button est un objet par exemple ! oui j'ai confondu avec controle je crois
un objet est un type ? n'est-ce pas ?? du style String, Integer ? non ?
0
Rejoignez-nous