Les liens (verbs) en dessous de la fenetre de propriété
Je sais que le titre n'est pas trés évoquateur, mais pas facile de décrire ces liens. Donc voici une photo

Je parle du lien Change Skin
qui est en dessous de la fenetre de propriétés, en fait d'aprés les noms données par les propriétés on peut appellé ca des verbs ? :p
J'ai cherché pas mal de temps ca sur le net, mais malheureusement sans réel succés, pourtant j'etais sur de l'avoir déjà vu quelque part ...
Aprés quelques recherches, j'ai enfin trouver, l'astuce se trouve dans le merveilleux livre Au coeur de Microsoft .net Visual Basic.net de Richard Clark
L'astuce se déroule bien sur dans le designer. (Pour ceux qui ne savent pas comment ca fonctionne : aller donc faire un tour du coté des Tkfé (Frederic Melantois)) ou autour des pages 220 du bouquins de Richard :p
Pour rajouter un lien il suffit simplement de surchargés la propriété verbs, et de rajouter des verbs, rien de bien compliqué
Public Class CalendarDesigner
Inherits ControlDesigner
Public Overrides ReadOnly Property Verbs() As System.ComponentModel.Design.DesignerVerbCollection
Get
Dim _oVerbs As New DesignerVerbCollection
_oVerbs.AddRange(MyBase.Verbs)
_oVerbs.Add(New DesignerVerb("Change Skin", AddressOf ShowSkinChangerForm))
Return _oVerbs
End Get
End Property
End Class
Seul particularité, le constructeur de DesignerVerb, demande System.EventHandler donc la méthode ShowSkinChangerForm devra bien sur avoir les paramètres qui vont bien (sender as object, e as EventArgs)
Aprés 1h de recherche, je suis content, j'ai enfin trouvé :), seul problème, j'ai aussi un Smart Tags, et dans ce smart tags, j'ai le meme lien, qui appelle la meme sub. Le problème c'est que la méthode qui affiche la form à partir du smart tags, fait pas partie de la meme class, mais de
Public Class CalendarActionList
Inherits DesignerActionList
Le copier coller fonctionne à merveille mais bof, doit y avoir mieux ...
et heureusement oui !
Pour mes smarts Tags, j'ai suivi à la lettre la méthode cité par TKfé, et aussi une bonne dose de Reflector :p
et une chose m'a echappé. voici comment je rajouter le lien
Public Overrides Function GetSortedActionItems() As DesignerActionItemCollection
Dim ai As DesignerActionItemCollection = New DesignerActionItemCollection
ai.Add(New DesignerActionPropertyItem("VisibleDate", "Visible month : "))
ai.Add(New DesignerActionMethodItem(Me, "ShowSkinChangerForm", "Change skin", False))
Return ai
End Function
si j'avais suivis un peu moins à la lettre les conseils de Tkfé, je me serais peut etre interressé un peu plus au constructeur de DesignerActionMethodItem et oui le 4eme paramètre est un boolean, et le nom de ce paramètre est includeAsDesignVerb il suffit de le passer à True et on obtient la capture ci dessus :)
C'etait pas si compliqué finalement :p