scottmat
Messages postés438Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention23 janvier 2011
-
26 mars 2007 à 17:38
scottmat
Messages postés438Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention23 janvier 2011
-
30 mars 2007 à 11:32
Bonjours à tous et à toutes,
J'ai créé un contrôle utilisateur (MyControl) et souhaiterai ré-analyser tous les contrôles provenant de ce moule.
Pour cela ces 2 lignes de code :
foreach (MyControl oControle in this.Controls)
{
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'.
Comment puis-je contourner ce problème ? j'ai essayer de me passer du SlipContainer et il me produit la même erreur sur TOUS mes objets qui ne sont pas MyControl (mon controle quoi)
Je travail la dessus depuis quelques jour maintenant, je précisse que je suis débutant en C# et en création d'objet en .NET
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 28 mars 2007 à 01:12
Si tu mets ton contrôle dans le SplitContainer c'est donc la liste des contrôles du SplitContainer qu'il faut parcourir..
foreach ( Control c in sc.Panel1.Controls ) // ou Panel2
{
// ...
}
Sinon pour parcourir les contrôles récursivement comme le propose Bidou c-à-d parcourir tous les contrôles mêmes ceux imbriqués dans d'autres contrôles tu as ma méthode FindControl
scottmat
Messages postés438Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention23 janvier 20111 27 mars 2007 à 15:20
Merci pour tes réponse,
je regarde ton code depuis tout à l'heure (excuse moi si je pose des questions bète) mais le code ne marche que pour un objet ?
C'est à dire j'ai modifier ton code pour tester et ai créer 2 (ou même 3) controles MyControl
Quand on arriver à la boucle il ne détecte que la dernière créer !
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 27 mars 2007 à 15:48
Non, tous les objects de type MyControl qui se trouve dans le Container (dans l'exemple de Lutinore, la form).
Ce code ne cherche pas à l'intérieur des sous-Controls !
scottmat
Messages postés438Date d'inscriptionsamedi 24 mai 2003StatutMembreDernière intervention23 janvier 20111 27 mars 2007 à 16:43
alors j'ai bien regarder ! Mais éléments à 'détecter' sont sur un objet (un SplitContainer), c'est peut-être sa qui bloque !
J'ai modifier le code pour reproduire le système de mon application, ce qui donne le code suivant :
public
partial
class
Form1
:
Form
{
private
class
MyControl
:
Button
{
}
public
Form1(){
InitializeComponent();
MyControl
ctrl =
new
MyControl
();ctrl.Name =
"ctrl"
;ctrl.Height = 50;
ctrl.Dock =
DockStyle
.Bottom;ctrl.BackColor =
Color
.SkyBlue;
this
.splitContainer1.Panel2.Controls.AddRange(
new
Control
[] {ctrl});}
private
void
button1_Click(
object
sender,
EventArgs
e){
foreach
(
Control
c
in
this
.Controls){
if
(c
is
MyControl
)
MessageBox
.Show(c.Name +
" - C'est mon contrôle !!! :D"
);}
}
}
J'ai ajouter un button et un SlipContainer1
L'élément MyControl se créer bien dans le slipContainer mais n'est pas détecter
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 27 mars 2007 à 18:41
Oui c'est normal, tu dois prendre tous les Controls récursivement, car ils peuvent justement être contenu eux même dans un autre Control (c'est à dire pas directement sur le container principal (la form))