Share via


Objets fournisseurs d'extendeurs

Un fournisseur d'extendeurs est un composant qui fournit des propriétés à d'autres composants. Par exemple, lorsqu'un composant ToolTip est ajouté à un formulaire, il fournit une propriété appelée ToolTip à chaque contrôle de ce formulaire. La propriété ToolTip apparaît ensuite dans la fenêtre Propriétés pour chaque contrôle et permet au développeur de définir pour elle une valeur au moment du design.

La propriété fournie réside en réalité dans l'objet fournisseur d'extendeurs lui-même et n'est donc pas une vraie propriété du composant qu'elle modifie. Au moment du design, la propriété apparaît dans la fenêtre Propriétés du composant modifié. En revanche, au moment de l'exécution, elle n'est plus accessible par le biais du composant. Dans l'exemple suivant, un formulaire a été créé ; il contient un bouton appelé MyButton et un contrôle ToolTip appelé MyToolTip qui fournit une propriété ToolTip.

' This is an example of code that is NOT CORRECT!
Dim myString as String
myString = MyButton.ToolTip
// This is an example of code that is NOT CORRECT!
string myString;
myString = MyButton.ToolTip;

Cette syntaxe générera une erreur de compilation, car le compilateur ne reconnaît pas ToolTip comme une propriété de MyButton, cette propriété étant en réalité fournie par MyToolTip. L'exemple suivant montre comment accéder correctement à cette propriété :

Dim myString as String
myString = MyToolTip.GetToolTip(MyButton)
string myString;
myString = MyToolTip.GetToolTip(MyButton);

Le fournisseur d'extendeurs est une classe et à ce titre peut posséder ses propres propriétés et méthodes. Pour désigner une propriété comme pouvant être fournie à d'autres composants, appliquez l'attribut ProvidePropertyAttribute au niveau de la classe. Cet attribut spécifie le nom de la propriété à fournir et le type d'objet auquel elle peut être fournie. Par convention, la propriété fournie n'est pas implémentée en tant que propriété, mais en tant que paire de méthodes. Dans ces méthodes, les mentions « Get » et « Set » doivent précéder le nom de la propriété à fournir. C'est ce que montre l'exemple suivant :

Imports System.ComponentModel
<ProvideProperty("MyText", GetType(Control))> Public Class MyExtender
   <ExtenderProvidedProperty()> Public Function GetMyText(acontrol as _
      Control) as String
      ' Insert code to implement function.
   End Function
   Public Sub SetMytext (acontrol as Control)
      ' Insert code to implement function.
   End Function
End Class
using System.ComponentModel;
[ProvideProperty("MyText", typeof("Control"))]
public class MyExtender
{
[ExtenderProvidedProperty()]
   public string GetMyText(Control acontrol)
   {
      // Insert code to implement method.
   }
   public void SetMyText(Control acontrol)
   {
      // Insert code to implement method.
   }
}

L'implémentation de la propriété fournie exige un objet Hashtable ou un autre objet collection de même type pour l'enregistrement et la récupération des valeurs de propriété de chaque contrôle. Pour plus d'informations, consultez Comment : implémenter un fournisseur d'extendeurs.

Chaque classe extendeur doit également implémenter l'interface IExtenderProvider. Cette interface se compose d'une unique méthode, CanExtend, qui retourne une valeur booléenne et indique au concepteur si un composant est candidat à une extension ou non. Par exemple, vous pouvez créer un extendeur qui ne fournit une propriété qu'aux seuls contrôles. L'exemple suivant montre comment implémenter la méthode CanExtend :

Imports System.ComponentModel
Public Function CanExtend(ByVal extendee As Object) As Boolean _
   Implements IExtenderProvider.CanExtend
   If Typeof extendee Is Control Then
      Return True
   Else
      Return False
   End If
End Function
public bool CanExtend(object extendee) 
{
   if (extendee is Control)
      return true;
   else
      return false;
}

Voir aussi

Tâches

Comment : implémenter un fournisseur d'extendeurs

Comment : implémenter un fournisseur d'extendeurs HelpLabel

Référence

IExtenderProvider

ProvidePropertyAttribute

Autres ressources

Fournisseurs d'extendeurs