Reflection [Résolu]

Signaler
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
Bonsoir a tous



Voila, j'ai une dll qui implémente plusieurs méthodes static qui effectuent un traitement sur une image passée en paramètre.



Pour tester ces methodes, je crée un petite application de test avec
une PictureBox, et une ListView, dans laquelle je met la liste des
fonctions existant dans la dll.

Pour remplir cette liste, plutot que de tout coder en dur, j'utilises
la reflection. (d'autant que la dll evolue, donc si je dois modifier
mon prog de test a chaque fois que j'ajoute des fonctions dans la dll,
ca risque d'etre chiant).

Les fonctions s'affichent bien dans la liste. Par contre, maintenant,
j'aimerais savoir si vous pouviez me dire comment je peux faire pour
invoquer la fonction quand je clique sur l'item correspondant.
(et en passant l'image de ma PictureBox en parametre).



Question subsidiaire : Y'a un moyen de ne pas affichier les méthodes de
la class Object dans la ListView, autrement que de les filtrer par leur
nom ?



Merci



Mx

7 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
et pour la question de base (bon, perso j'ai ajouter le tableau de MethodInfo à un listbox et mit DisplayMember sur Name pour gagner du temps) :


MethodInfo methode = (MethodInfo)listBox_Methods.SelectedItem;
methode.Invoke(null, new object[]{pictureBox.Image});
pictureBox.Invalidate();

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
euh tu as parler de methodes statiques, donc Invoke(null,...), pck là apparemment tu lui demande d'invoquer la methode sur l'instance de ton form alors forcement...

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
Pour la question subsidiaire : spécifier BindingFlags.DeclaredOnly au listing des méthodes devrait suffire.

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Merci coq .



En fait j'en etais la dans l'evenement SelectedIndexChanged, mais ca plantait encore



picture.Image = ((Image)((MyListViewItem)sender).MI.Invoke(this, new object[] { picture.Image }));



Donc je vais voir par rapport a tes réponses !



Mx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
(J'oubliais de préciser que j'avais fait heriter MyListViewItem de la
classe ListViewItem et que j'y avais ajouter une Propriété MethodInfo
'MI' )
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Bon, apres avoir mélanger ta proposition et mon code de base, et
quelques erreurs de ma part (cast d'une string en MethodInfo par
exemple ) j'ai enfin reussi a le faire marcher.



Merci pour ton aide coq :)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
84
ah oui le cast il devait pas aimer lol

Cocoricoooooooo !!!!
coq
MVP Visual C#