(c#) Problème gestion d'évents de control ajoutés "en live"

alienatyon Messages postés 6 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 3 septembre 2004 - 2 sept. 2004 à 23:27
alienatyon Messages postés 6 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 3 septembre 2004 - 3 sept. 2004 à 15:04
Bonjour à tous et à toutes.

Je suis entrain de développer une application en c#, dans laquelle j'ajoute des contrôles (labels et boutons) "en live" (plus précisément, un click sur un bouton ajoute automatiquement 2 labels et 2 boutons). Le truc, c'est que je ne voie absolument pas le moyen de gérer l'événement "onClick" de ces 2 boutons.

Est-ce quelqu'un aurait une piste?
Merci de votre coopération :)

9 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
2 sept. 2004 à 23:52
par exemple a la generation de chaque bouton tu peux faire :
button.Click += new EventHandler(buttonsLive_Click);


ainsi tu associe les events de tous tes boutons dynamiques à la même methode, a toi de les differencier dans celle ci

private void buttonsLive_Click(object sender, System.EventArgs e)
{
// récupération du bouton ayant declencher l'event
Button button = (Button)sender;

// code de gestion des clics sur les boutons "live" ;)
}


Cocoricoooooooo !!!!
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
2 sept. 2004 à 23:56
Voila un bout de code te montrant ce que tu demandes

    
    private void Form1_Load(object sender, EventArgs e)
        {
            Button btn = new Button() ;
            btn.Location = new System.Drawing.Point(20, 20);
            btn.Name = "btn";
            btn.Size = new System.Drawing.Size(200, 25);
            btn.Text = "The button";
            btn.Click += new System.EventHandler(btn_Click);

            this.Controls.Add(btn);
        }

        private void btn_Click(object sender, EventArgs e)
        {
            MessageBox.Show("bouton cliqué");
        }


La ligne qu'il faut retenir est :

btn.Click += new System.EventHandler(btn_Click);

@+

Cyril
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
2 sept. 2004 à 23:57
dsl coq, j'avais pas vu ton post :)

Cyril
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
3 sept. 2004 à 00:04
lol pas grave, au contraire, d'habitude c'est moi qui me fait avoir ^^
mieux vaut 2 exemples que rien du tout :)

Cocoricoooooooo !!!!
0

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

Posez votre question
alienatyon Messages postés 6 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 3 septembre 2004
3 sept. 2004 à 12:01
Plop :)

Merci les gars pour vos coups de main, ça marche nickel.

Par contre, maintenant, autre problème :D (désolé)

Je ne voie pas du tout comment accéder à mes labels crées "en live" par ces boutons. J'ai bien essayé en bouclant sur tous les contrôles ajoutés en live dans ma groupBox, et je fais un test en fonction du nom du bouton cliqué, mais ça me plait pas (et ça me ferait peur si la groupBox se voit dotée d'une centaine de contrôles :p).
Y'a-t-il un moyen d'accéder au labels par pointeur comme en c++ ou par référence?
Mais alors là, je vois pas comment (mais alors absolument pas);

Merci de votre coopération
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
3 sept. 2004 à 12:18
je pense que dans ce cas tu peux utiliser la propriété Tag de la classe Button (héritée de Control) : on y met ce qu'on veut (object)

donc mon idée :
quand tu crées tes controles (button et label) "live", tu les ajoutes dans un ArrayList (System.Collections) que tu affectes ensuite à la propriété Tag du bouton ayant lancer la création des controles.

et quand tu veux recuperer cette fameuse liste tu fais
ArrayList liste = (ArrayList)buttonClique.Tag;


comme ça tu ne parcouras plus que la liste associée à un bouton au lieu de l'ensemble des controles contenus par ton grpbox

exemple de code pour differencier Label/Button :
object controle = liste[0];
if ( controle.GetType() == typeof(Button) )
{
// c'est un bouton
}
else if ( controle.GetType() == typeof(Label) )
{
// c'est un Label
}
...


remarque arrivé ici je ne suis plus sur d'avoir saisi le probleme %-6

Cocoricoooooooo !!!!
0
alienatyon Messages postés 6 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 3 septembre 2004
3 sept. 2004 à 14:23
Ben en gros, quand tu places un contrôles"à la main sur la form", tu peux ensuite faire :
monContrôle.méthode() ....


Moi j'ajoute mes contrôles en live, après, dans une autre fonction, je ne peux pas faire la même chose (même si syntaxiquement ça passe, l'edi m'envoie une erreur comme quoi mon objet n'est pas lié à une référence d'objet (ou un truc dans le genre) :p)

Voilà, si ça peut aider à bien situer le problème ;)
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
3 sept. 2004 à 14:34
euh ba là pas de prob

object controle = liste[0];
if ( controle.GetType() == typeof(Button) )
{
// c'est un bouton
Button bouton = (Button)controle;
bouton.PerformClick(); // bon ok aucun interet mais j'avais pas d'autre idée ^^
}
else if ( controle.GetType() == typeof(Label) )
{
// c'est un Label
Label label = (Label)controle;
label.Text = "Cool";
}


Cocoricoooooooo !!!!
0
alienatyon Messages postés 6 Date d'inscription lundi 15 décembre 2003 Statut Membre Dernière intervention 3 septembre 2004
3 sept. 2004 à 15:04
Ok, merci, je voyais pas les choses comme ça, mais bon, si ça marche ;)
Bon, faut que je m'absente :p Je verrais ça en rentrant.
Merci beaucoup du coup de main.
0
Rejoignez-nous