scottmat
Messages postés438Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention23 janvier 2011
-
1 mars 2007 à 15:22
scottmat
Messages postés438Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention23 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 ;)
scottmat
Messages postés438Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention23 janvier 20111 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 !
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 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.
scottmat
Messages postés438Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention23 janvier 20111 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
Nikoui
Messages postés794Date d'inscriptionvendredi 24 septembre 2004StatutMembreDernière intervention19 août 200813 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)
scottmat
Messages postés438Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention23 janvier 20111 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