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

Windows Forms Discussion :

[C#] Comment joindre des arguments à un évènement ?


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Par défaut [C#] Comment joindre des arguments à un évènement ?
    Bonjour à tous,

    Je conçois pour l'instant une petite application dont le layout est généré dynamiquement. Il s'agit en réalité d'une liste de boutons construite dans une boucle lors de l'exécution du programme. A chaque bouton, j'associe une méthode unique qui traitera l'évènement Click :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    for (int i=0; i<10; i++) 
    {
    	Button bTemp = new Button();
    	bTemp.Text = "bouton "+i;
    	bTemp.Location = new Point(10,i*30);
    	bTemp.Click += new System.EventHandler(this.bTemp_Click);
     
    	this.Controls.Add(bTemp);
    }
     
    ...
     
    private void bTemp_Click(object sender, System.EventArgs e)
    {
        MessageBox.Show("Clic sur le bouton");
    }
    Maintenant, j'aimerais pouvoir passer un paramètre à la méthode bTemp_Click, afin, par exemple, d'afficher dans la MessageBox le numero du bouton sur lequel j'ai cliqué. Je présume qu'il faudrait initialiser un objet EventArg dans lequel je mettrai le numéro en question, mais je ne sais pas comment procéder...

    Quelqu'un peut-il m'apporter un peu d'aide ?

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 65
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Si ton besoin est proche de l'exemple que tu donnes, ne te complique pas la tâche et utilise directement la propriété .Tag de Button pour y mettre la donnée dont tu as besoin. Comme cette propriété est un type Object, tu peux y metre ce que bon te semble, par exemple une structure perso
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MyDatas
    {
       public int Number;
       public string Data;
      //..etc..
    }
    Comme je suppose que tu abonnes tous les boutons à une seule méthode bTemp_Click. Il ne reste quà ne pas oublier les differents transtypages necessaire.

    Exemple si tu a mis un simple int dans le .Tag:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private void bTemp_Click(object sender, System.EventArgs e) 
    { 
        int num = (int) ((Button) sender).Tag;
        MessageBox.Show("Clic sur le bouton" + num.ToString());
        switch (num)
        {
            case ///etc...
        }
    }

  3. #3
    Membre expérimenté Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Par défaut
    tu crées ces 2 classes
    une classe MyButton à toi qui hérite de button et qui possède son propre event.
    une classe MyEventArgs à toi qui hérite de EventArgs et qui rajoute la notion de nombre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
            public class MyButton : Button 
    	{
    		private int mNumber;
    		public delegate void MyEventHandler( object sender, MyEventArgs e );
    		public event MyEventHandler myEvent;
     
    		public int Number
    		{
    			get { return mNumber; }
    			set { mNumber = value; }
    		}
     
    		protected override void OnClick( EventArgs e )
    		{
    			base.OnClick( e );
    			if (myEvent != null)
    			{
    				MyEventArgs args = new MyEventArgs();
    				args.Number = mNumber;
    				myEvent( this, args );
    			}
    		}
    	}
     
    	public class MyEventArgs : EventArgs
    	{
    		private int mNumber;
     
    		public int Number
    		{
    			get { return mNumber; }
    			set { mNumber = value; }
    		}
     
    	}
    Ne te restes plus qu'à instancier tes bouttons ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       MyButton bTemp = new MyButton();
       bTemp.Number = i;
       bTemp.Text = "bouton " + i;
       bTemp.Location = new Point(10,i*30);
       bTemp.myEvent += new MyButton.MyEventHandler( button1_myEvent );
    tu auras ainsi dans "MyEventArgs e" le nombre à récupérer.

    Maintenant si tu crées seulement la classe "MyButton" tu pourras tjs récupérer ton nombre ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((MyButton)sender).Number
    ...

  4. #4
    Membre confirmé
    Avatar de Amnesiak
    Profil pro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Par défaut
    Génial, merci à vous deux pour ces excellentes solutions !

    Bon travail, a+ !

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

Discussions similaires

  1. comment donner des arguments au main()
    Par adel.87 dans le forum Débuter
    Réponses: 3
    Dernier message: 23/12/2007, 21h22
  2. [Blog] Comment joindre des fichiers ?
    Par laminez dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 17/10/2007, 11h31
  3. Comment passer des arguments en ligne de commande?
    Par Razgriz dans le forum NetBeans
    Réponses: 1
    Dernier message: 11/04/2007, 11h11
  4. Comment passer des argument a un script php ?
    Par Florina dans le forum Linux
    Réponses: 2
    Dernier message: 11/12/2005, 14h38

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