Appelle d'une méthode en ne connaissant que son nom

Résolu
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 - 27 juil. 2004 à 10:15
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 - 27 juil. 2004 à 14:55
hello tout le monde,

je cherche à générer un menu de maniere dynamique en fonction des données stockées dans une de mes tables.
je stock dans ma table le nom de la méthode à appeler
seulement voila c'est du string alors que dans mon :

string clic = "message()";

nomMenu.Click += new System.EventHandler(clicl);


il attend une méthode donc forcement...

j'ai donc essayer un truc style :

string clic = "message()";

Type v_Type=Type.GetType("Form1",true,false);

v_Type.GetMethod(clic).Invoke(v_Type,new Object[] {});


recuperer ici : http://www.csharpfr.com/code.aspx?ID=11444

mais je ne m'en sors pas...

kkun a un moyen ???

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."

8 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
27 juil. 2004 à 14:44
j'ai utiliser :
public static Delegate CreateDelegate(
   Type type,
   object target,
   string method
);


target : The class instance on which method is invoked.

toi tu lui passe nomMenu, que je suppose etre ton instance de MainMenu ou ContextMenu
hors ta methode n'est pas definie dans la classe du menu, mais dans ton form, donc tu dois lui passer l'instance du form

et aussi
public void AddEventHandler(
   object target,
   Delegate handler
);

target : The event source.
et toi tu lui passe this, c'est a dire le form : donc tu defini l'event Click du Form et non celui du MenuItem

Cocoricoooooooo !!!!
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
27 juil. 2004 à 11:25
tu peux faire ça :
string method = "Methode";
MethodInfo minfo = this.GetType().GetMethod(method);
minfo.Invoke(this, null);


il me semble que la methode en question doit etre public

enfin sur ce coup là je ne suis pas sûr de comprendre ce que tu veux faire au juste

Cocoricoooooooo !!!!
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
27 juil. 2004 à 11:46
le but ultime est de générer un menu en fonction des utilisateurs...

donc ajouter en dynamique les méthodes a appeler sur le click du menu...

je vais tester ton code

merci..

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
27 juil. 2004 à 11:52
le invoke en fait il exceutte direct la méthode c ca ???

moi j'aimerais faire un abonnement a une méthode en passant par le nom de cette méthode que je stocke en string

grosso modo je voudrais reussir a transformer mon string en méthode que je pourrais excuter sur le clik du menu

string monnomdemethode="clic";

....code qui permet de trouver la méthode ayant pour nom monnomdemethode.....et qui l'affecte a mamethodeclick....

nomMenu.Click += new System.EventHandler(MamethodeClick);


sais pas si g ete + clair....
:-p

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
0

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

Posez votre question
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
27 juil. 2004 à 12:11
plutot marrante ton idée ^^

ce code devrait faire l'affaire :
string method = "Methode";
EventInfo einfo = this.GetType().GetEvent("Click");
einfo.AddEventHandler(
this.button2, 
Delegate.CreateDelegate(einfo.EventHandlerType, this, method)
);


Cocoricoooooooo !!!!
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
27 juil. 2004 à 13:16
merci jva voir ca... :o))

tu aurais fait differement pour generer un menu dynamiquement en fonction d'un utilisateur ???

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
27 juil. 2004 à 14:30
j'ai fait :

string method = "message";

EventInfo einfo = nomMenu.GetType().GetEvent("Click");

einfo.AddEventHandler(

this, 

Delegate.CreateDelegate(einfo.EventHandlerType, nomMenu, method)

);


et j'obtiens erreur de liaison avec la méthode cible ???

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
0
Arthenius Messages postés 1182 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 6 septembre 2011 14
27 juil. 2004 à 14:55
Ok ca fonctionne autant pour moi :

voila le code final :
string method = "message";

EventInfo einfo = nomMenu.GetType().GetEvent("Click");

einfo.AddEventHandler(

nomMenu, 

Delegate.CreateDelegate(einfo.EventHandlerType, this, method)

);

 

public void message(object sender, System.EventArgs e)

{

MenuItem item = (MenuItem)sender;

MessageBox.Show(item.Text, "Fenetre affichée après clic", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

 


merci coq

Arthenius

"Ce qui ne me tue pas, me rend plus fort..."
0
Rejoignez-nous