samedi 9 juillet 2005 15:50
sebmafate
Etude de l'interface IExtenderProvider
Cela fait des semaines que j'avais envie de regarder d'un peu plus près cette interface, elle m'intriguait de part son fonctionnement et sa mise en oeuvre. Je vous livre donc ici le contenu de mes recherches.
Première approche.
Avant de me jeter à corps perdu dans le code et l'utilisation de cette Interface, j'ai lu la documentation msdn s'y rapportant et voici que j'y ai trouvé :
Définit l'interface pour étendre les propriétés à d'autres composants dans un conteneur.
On y découvre que 6 composants du framework l'utilisent : ComponentTray, ErrorProvider, HelpProvider, LocalizationExtenderProvider, PropertyTab et ToolTip.
En lisant la documentation, une chose nous ravit tout de suite : il n'y a qu'une méthode à implémenter ! Ca ressemble à du gateau, on se dit "chouette, ca va aller vite !".
Premier essai :
Je crée un composant et j'implémente cette fameuse interface, ma méthode CanExtendee, qui au passage permet de filtrer les types d'objets que nous voulons étendre... et là rien ! :o(
Je crois que je viens de me faire avoir !
Approche en profondeur.
Ne m'avouant pas vaincu, j'ai utilisé l'ultime outil du bidouilleur .NET : R E F L E C T O R !!! J'ai navigué jusqu'à la classe ToolTip et j'ai découvert une petite chose intéressante : la déclaration de la classe est précédée de l'attribut suivant : [ProvideProperty("ToolTip", typeof(Control))], ca indique au designer que notre composant propose une propriété "ToolTip" à tous les objets de la classe "Control".
En regardant de plus près, j'ai aussi remarqué que 2 méthodes avait comme suffixe "ToolTip", je me suis dit que ca serait peut-être pratique de suivre l'exemple et d'adapter ces méthodes à mes besoins.
J'ai donc créé une classe correspondant a un besoin ponctuel : afficher un text lorsqu'une TextBox n'a ni le focus ni de texte à l'intérieur.
En résumé
Pour étendre les propriétés d'un contrôle, vous devez suivre les 3 points suivant :
-
Implémenter l'interface IExtenderProvider et son unique méthode, CanExtendee ;
-
Ajouter l'attribut ProvideProperty à la déclaration de votre classe ;
-
Ecrire 2 méthodes permettant d'accéder à la propriété que vous exportez :
- GetToolTip(Control)
- SetToolTip(Control, String)
Biensûr, vous devrez remplacer le suffixe "ToolTip" par le nom de votre propriété.
Vous trouverez sur csharpfr la source correspondant à ce mini-article à l'adresse suivante : http://www.csharpfr.com/code.aspx?ID=32604.
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :