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

bubbathemaster 342 Messages postés dimanche 26 janvier 2003Date d'inscription 25 mars 2009 Dernière intervention - 21 nov. 2007 à 14:54 - Dernière réponse : elguevel 735 Messages postés jeudi 19 décembre 2002Date d'inscription 22 novembre 2016 Dernière intervention
- 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
Nikoui 794 Messages postés vendredi 24 septembre 2004Date d'inscription 19 août 2008 Dernière intervention - 22 nov. 2007 à 09:08
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

Merci Nikoui 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 70 internautes ce mois-ci

Commenter la réponse de Nikoui
Meilleure réponse
Nikoui 794 Messages postés vendredi 24 septembre 2004Date d'inscription 19 août 2008 Dernière intervention - 22 nov. 2007 à 09:11
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

Merci Nikoui 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 70 internautes ce mois-ci

Commenter la réponse de Nikoui
Nikoui 794 Messages postés vendredi 24 septembre 2004Date d'inscription 19 août 2008 Dernière intervention - 21 nov. 2007 à 17:42
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
bubbathemaster 342 Messages postés dimanche 26 janvier 2003Date d'inscription 25 mars 2009 Dernière intervention - 21 nov. 2007 à 22:48
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
bubbathemaster 342 Messages postés dimanche 26 janvier 2003Date d'inscription 25 mars 2009 Dernière intervention - 22 nov. 2007 à 13:56
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
elguevel 735 Messages postés jeudi 19 décembre 2002Date d'inscription 22 novembre 2016 Dernière intervention - 23 nov. 2007 à 13:49
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.