IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Créer un événement sur un composant dynamique


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Par défaut Créer un événement sur un composant dynamique
    Bonjour, j'ai un petit problème et j'espère que l'un d'entre vous pourra m'aider.
    Voici mon problème, j'ai créé des composants dynamiquement dans un groupbox comme des Button ou des LinkLabel, ça ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for(i=0;i<5;i++){
    Button _btn = new Button();
    _btn.Text = "Fichier " + i;
    _grpbox.Controls.Add(_btn);
    }
    J'aimerais en fait récupérer l'événement "Click" de chaque bouton. Quand je clique sur un des boutons, j'aimerais ouvrir le fichier correspondant au texte du bouton. (On me comprends ?)
    Je pense qu'il faut utiliser les "delegate", "EventArgs", "EventHandler" etc. Mais je ne comprends pas bien les ressources du net. Quelqu'un peut il me donner un lien un bout de code représentant un exemple très simple ?
    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Par défaut
    Salut,

    J'ai qu'une petite idée. Je propose, essai de voir ce que tu peux en faire.

    for(i=0;i<5;i++){
    Button _btn = new Button();
    _btn.Text = "Fichier " + i;
    _btn.Click += new System.EventHandler(_btn_Click);
    _grpbox.Controls.Add(_btn);
    }

    Ensuite, dans la fonction _btn_Click, en utilisant this, il est peut être possible de récupérer le nom du bouton.

    Mais, je trouve ça un peu bizarre. Tu as la même référence (_btn) pour tes 5 boutons... Je me demande comment l'appli va se retrouver et savoir.

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Le code de LoDev est correct. Ensuite dans la méthode _btn_Click, le paramètre sender contient le controle qui a déclenché l'événement, tu sauras ainsi quel bouton est cliqué.

    EDIT :
    Pour répondre à la question de LoDev par rapport à la variable _btn. Elle est réinstanciée à chaque boucle, donc il y a bien 5 variables instanciées. Ensuite la variable est ajoutée dans la collection ce qui fait qu'elle n'est pas détruite à la fin de la boucle, car une référence accessible depuis la collection existe toujours sur les zones mémoires allouées.
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par LoDev Voir le message
    Salut,

    J'ai qu'une petite idée. Je propose, essai de voir ce que tu peux en faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for(i=0;i<5;i++){
    Button _btn = new Button();
    _btn.Text = "Fichier " + i;
    _btn.Click += new System.EventHandler(_btn_Click);
    _grpbox.Controls.Add(_btn);
    }
    Ensuite, dans la fonction _btn_Click, en utilisant this, il est peut être possible de récupérer le nom du bouton.
    C'est possible en effet, en faisant (sender as Button).Text.

    Mais, je trouve ça un peu bizarre. Tu as la même référence (_btn) pour tes 5 boutons... Je me demande comment l'appli va se retrouver et savoir.
    Non, ce n'est pas le même ; _btn est un nom temporaire, on en crée bien 5 différents.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 9
    Par défaut
    C'est bon, ça marche
    Tu m'as mis sur la piste en effet, une très bonne piste d'ailleurs ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void _btn_Click(object sender, EventArgs e)
            {
                Button btn= new Button();
                btn = (Button)sender;
                Console.WriteLine(btn.Text);
            }
    Merci beaucoup

  6. #6
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Il est inutile de faire un new sur le bouton car la variable ne sera pas utilisée.
    Tu peux faire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Button btn = (Button) sender;
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/12/2010, 08h34
  2. Créer des liens sur un tableau dynamique
    Par SonnyFab dans le forum ASP.NET
    Réponses: 19
    Dernier message: 09/09/2010, 14h05
  3. Créer un évènement sur un Controle Web
    Par Freud44 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/09/2009, 08h51
  4. Comment créer un événement et un bouton dynamique
    Par mechatikhaled dans le forum Composants VCL
    Réponses: 1
    Dernier message: 13/04/2008, 18h43
  5. Problème d'événements sur un composant TChart
    Par 3nTiC dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/07/2006, 16h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo