Controle Utilisateur Problème SplitContainer [Résolu]

scottmat 440 Messages postés samedi 24 mai 2003Date d'inscription 23 janvier 2011 Dernière intervention - 26 mars 2007 à 17:38 - Dernière réponse : scottmat 440 Messages postés samedi 24 mai 2003Date d'inscription 23 janvier 2011 Dernière intervention
- 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

Merci par avance ;)
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 28 mars 2007 à 01:12
3
Merci
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

http://www.csharpfr.com/infomsg_WINFORM-CONTROLES-DYNAMIQUES_537180.aspx

ou

this.Control.ControlCollection.Find( key, searchAllChildren );

 

Merci Lutinore 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 122 internautes ce mois-ci

Commenter la réponse de Lutinore
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 26 mars 2007 à 18:36
0
Merci
Salut,

foreach ( Control c in this.Control )
{
   // ou as
   if ( c is MyControl )
   {
         // ...
   }
}
Commenter la réponse de Lutinore
scottmat 440 Messages postés samedi 24 mai 2003Date d'inscription 23 janvier 2011 Dernière intervention - 26 mars 2007 à 19:37
0
Merci
salut,
merci pour ta réponse
mais sa plante directement dans la boucle, donc le code entre les accolades n'a pas le temps de s'executer
Commenter la réponse de scottmat
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 27 mars 2007 à 12:38
0
Merci
Tu as remarqué que j'ai oublié un 's' à this.ControlS' dans le code précédent. :p

Même avec un SplitContainer et ton propre contrôle ça marche :

public partial class Form1 : Form
{
    private class MyControl : Control
    {


    }


    public Form1( )
    {
        InitializeComponent( );


        Button b1 = new Button( );
        b1.Text = "b1";
        b1.Name = "b1";


        Button b2 = new Button( );
        b2.Text = "b2";
        b2.Text = "b2";


        SplitContainer sc = new SplitContainer( );
        sc.Name = "sc";
        sc.Dock = DockStyle.Fill;
        sc.Panel1.BackColor = Color.Aquamarine;
        sc.Panel1.Controls.Add( b1 );
        sc.Panel2.BackColor = Color.Purple;
        sc.Panel2.Controls.Add( b2 );


        MyControl ctrl = new MyControl( );
        ctrl.Name = "ctrl";
        ctrl.Height = 50;
        ctrl.Dock = DockStyle.Bottom;
        ctrl.BackColor = Color.SkyBlue;


        this.Controls.AddRange( new Control[ ] { sc, ctrl } );


        foreach ( Control c in this.Controls )
        {
            if ( c is MyControl )
                MessageBox.Show( c.Name +  " - C'est mon contrôle !!! :D" );
        }
    }
}
Commenter la réponse de Lutinore
scottmat 440 Messages postés samedi 24 mai 2003Date d'inscription 23 janvier 2011 Dernière intervention - 27 mars 2007 à 15:20
0
Merci
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 !
Commenter la réponse de scottmat
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 27 mars 2007 à 15:48
0
Merci
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 !

<hr />
-Blog-
Commenter la réponse de cs_Bidou
scottmat 440 Messages postés samedi 24 mai 2003Date d'inscription 23 janvier 2011 Dernière intervention - 27 mars 2007 à 16:43
0
Merci
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
Commenter la réponse de scottmat
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 27 mars 2007 à 18:41
0
Merci
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))

<hr />
-Blog-
Commenter la réponse de cs_Bidou
scottmat 440 Messages postés samedi 24 mai 2003Date d'inscription 23 janvier 2011 Dernière intervention - 30 mars 2007 à 11:32
0
Merci
tout simplement parfait ! Merci à vous deux pour votre aide :)
Commenter la réponse de scottmat

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.