Abonnement USER CONTROL

Résolu
belew66 Messages postés 2 Date d'inscription mardi 7 juin 2011 Statut Membre Dernière intervention 13 juin 2011 - 13 juin 2011 à 12:11
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 13 juin 2011 à 22:05
Bonjour,

J'ai crée mon contrôle utilisateur, celui ci correspond au visuel d'une carte image (pour un jeux du memory ou il faut trouver les paires d'images).

Mon problème:

Dans une boucle j'instancie ma liste de contrôle que j'appelle Carte_UI et également je l'abonne a un gestionnaire d’événement sur le click or, des que je clique sur mes contrôles dans l'application rien ne ce passe j'essaye avec un point d'arrêt et quand je clique événement n'est pas pris en compte.

Voila mon parcours complet

foreach(Carte laCarte in ttlesc)
                {
                    Carte_UI x = new Carte_UI(laCarte);//création carte
                    x.Click += new EventHandler(x_Click);//abonnement
                    tableLayoutPanel1.Controls.Add(new Memor_IG.Carte_UI(laCarte));//Ajout à un tableau
                    
                }


Voila mon gestionnaire d’événement
(les msg box sont juste là pour le test )

void x_Click(object sender, EventArgs e)
        {
            if (carteRetournee1 == null)
            {
                carteRetournee1 = (Carte_UI)sender;
                MessageBox.Show("objet ajouté dans carte1 ");
                
            }
            else
            {
                carteRetournee2 = (Carte_UI)sender;
                MessageBox.Show("objet ajouté dans carte2");
            }

3 réponses

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
13 juin 2011 à 19:40
Bonjour,
je ne suis pas sûr de mon coup, mais je pense que x étant déclaré dans ta boucle foreach sa durée de vie vaut un tour de boucle et donc la durée de vie de l'abonnement idem.

Essaye en créant une seule instance en dehors de ton foreach pour voir.

Whismeril
3
belew66 Messages postés 2 Date d'inscription mardi 7 juin 2011 Statut Membre Dernière intervention 13 juin 2011
13 juin 2011 à 19:47
Merci de ta réponse j'ai essayé cet aprés midi et j'ai réussi a trouver le problème c'est que tout les événements ou propriétés du contrôle doivent être modifiés dans le constructeur par default (Carte_UI), Or j'ai toutefois une question comment puis je appelé mon gestionnaire d’événement de ma classe formulaire de la classe Carte_UI ?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
13 juin 2011 à 22:05
Essaye ça:
list<Carte_UI> MaListe = new list<Carte_UI>();// à déclarer pour la classe formulaire entière

foreach(Carte laCarte in ttlesc)
                {
                    Carte_UI x = new Carte_UI(laCarte);//création carte
                    MaListe.Add(x);
                    tableLayoutPanel1.Controls.Add(new Memor_IG.Carte_UI(laCarte));//Ajout à un tableau
                    
                }
foreach(Carte_UI x in MaListe)
                    x.Click += new EventHandler(x_Click);//abonnement


MaListe est déclarée "en global", si mon idée de départ est la bonne ça devrait fonctionner.
Ca fait faire deux boucles, je pense qu'il y a mieux, mais si ça marche ça te donne une piste.

Whismeril
0
Rejoignez-nous