Passer des paramètres à un evenement [Résolu]

Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Dernière intervention
25 mars 2009
- - Dernière réponse : elguevel
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Dernière intervention
22 novembre 2016
- 23 nov. 2007 à 13:49
Bonjour,

Je souhaite créer dynamiquement des ToolStripMenuItems associés à des évènements quand on clique dessus, pour ce faire, rien de plus simple, j'ai créé une fonction (vide):

private void mnuMonMenu_onClick(object sender, EventArgs e)
{
}

Et je créé des éléments du menu que j'ajoute, associés avec l'evennement onclick, style:
ToolStripMenuItem mnuItem = new ToolStripMenuItem("Clique moi stp!", null, mnuMonMenu_onClick);
mnuSystemTray.Items.Add(mnuItem);

Quand je clique dessus ca va bien dans la fonction mnuMonMenu_onClick, pas de problème, mais je n'arrive pas à passer un argument à cette fonction. Je comprends rien à l'exemple donné sur MSDN au sujet des EventArgs. Y'a t-il une solution simple (ou tout du moins facile à mettre en oeuvre) ?

Merci!
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Dernière intervention
19 août 2008
7
3
Merci
Non, l'eventArgs ne sert pas à ça, car ce n'est pas toi qui le remplis, mais dans ce cas précis c'est le framework qui déclenche l'évènement et met les paramètres prévus pour cet évènement.

Ce que tu peux faire par contre, c'est quelque chose comme ca (de mémoire, pas compilé ni testé) :

// Création du menu item en l'associant à ta fonction en cas de click
ToolStripMenuItem mnuItem = new ToolStripMenuItem("Configurer", null, mnuMonMenu_onClick));
// On met dans la propriété Tag des infos spécifiques à ce menu Item
mnuItem.Tag = ""{559E7662-E4B0-44DC}"; // Tag est de type objet, tu peux y mettre ce que tu veux

Et lorsque tu récupère le click dans ta fonction :
ToolStripMenuItem mnuItem = source as ToolStripMenuItem;
Object myParam = mnuItem.Tag;


Working as designed
www.nikoui.fr

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Nikoui
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Dernière intervention
19 août 2008
7
3
Merci
En gros, tout les controles du framework possèdent cette fameuse propriété Tag de type object, qui permet justement de la remplir avec des infos en tout genre selon tes besoins -d'embarquer des infos supplémentaire dans un controle sans avoir à le dériver pour rajouter des propriétés spécifiques.

Cela dit, lorsque les infos en questions deviennent vraiment trop spécifiques, il faut mieux dans ce cas spécialiser le controle, c'est à dire le dériver pour en créer un plus adapté, mais ce n'est pas le cas ici.


Working as designed
www.nikoui.fr

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Nikoui
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Dernière intervention
19 août 2008
7
0
Merci
L'évènement Click est levé par le framework, pas par toi, donc c'est lui qui passe les arguments et qui remplis "sender" et "e" avec les 'bonnes' valeurs). Généralement, les choses sont bien faites et dans les arguments que tu recois, tu as ce qu'il faut pour traiter l'évènement (la source par exemple).

Quel genre de paramètres veux tu passer a ton évènement ?


Working as designed
www.nikoui.fr
Commenter la réponse de Nikoui
Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Dernière intervention
25 mars 2009
5
0
Merci
Je récupère bien le nom du bouton cliqué dans sender, mais ca ne m'aide pas trop. Je voudrais passer une chaine de caractères. En gros j'ai un menu qui se construit dynamiquement suivant les cartes réseaux installées dans la bécanne. Chaque carte réseau génère un sous menu avec les choix type "sauver profile" "paramétrer", etc etc. Quand l'utilisateur clique sur ces menus, j'ai donc besoin de savoir quelle carte réseau est concernée. J'aimerai y passer en argument l'hardware id de la carte réseau (vous savez, les machins type "{559E7662-E4B0-44DC-93DE-6D089EB4CF12}"), faire un truc du genre (à la construction des menus) :

ToolStripMenuItem mnuItem = new ToolStripMenuItem("Configurer", null, mnuMonMenu_onClick("{559E7662-E4B0-44DC"}));

à la construction du menu. EventArgs a l'air de servir à ça, mais impossible de trouver un exemple d'utilisation concret :/
Commenter la réponse de bubbathemaster
Messages postés
342
Date d'inscription
dimanche 26 janvier 2003
Dernière intervention
25 mars 2009
5
0
Merci
Hum oui je vois. En fait je pensais à planquer l'info dans le ToolTip au pire, mais puisque qu'il y a un objet prevu pour stocker du tout et n'importe quoi, alors je vais utiliser ça.
Merci!
Commenter la réponse de bubbathemaster
Messages postés
735
Date d'inscription
jeudi 19 décembre 2002
Dernière intervention
22 novembre 2016
4
0
Merci
Tu peux créer une classe qui hérite de EventArgs et qui contiendra les champs que tu souhaites.
Et tu te sert ensuite de cette classe pour passer tes arguments.

 
Commenter la réponse de elguevel

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.