Extenderanbieterobjekte

Aktualisiert: November 2007

Ein Extenderanbieter ist eine Komponente, die Eigenschaften für andere Komponenten bereitstellt. Wenn einem Formular z. B. eine ToolTip-Komponente hinzugefügt wird, stellt diese für jedes Steuerelement auf dem Formular eine Eigenschaft mit dem Namen ToolTip zur Verfügung. Die ToolTip-Eigenschaft wird dann im Eigenschaftenfenster für jedes Steuerelement angezeigt und ermöglicht es dem Entwickler, zur Entwurfszeit einen Wert für diese Eigenschaft anzugeben.

Die Eigenschaft, die vom Extenderanbieter bereitgestellt wird, befindet sich im Extenderanbieterobjekt und ist daher keine richtige Eigenschaft der Komponente, die dadurch geändert wird. Zur Entwurfszeit wird die Eigenschaft im Eigenschaftenfenster der geänderten Komponente angezeigt. Zur Laufzeit kann jedoch nicht über die Komponente auf die Eigenschaft zugegriffen werden. In dem folgenden Codebeispiel wurde ein Formular mit einer Schaltfläche MyButton und einem ToolTip-Steuerelement mit der Bezeichnung MyToolTip erstellt. Dieses Steuerelement stellt eine ToolTip-Eigenschaft bereit.

' 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;

Diese Syntax generiert einen Compilerfehler, da der Compiler ToolTip nicht als Eigenschaft von MyButton erkennt. Dies liegt daran, dass die Eigenschaft im Grunde von MyToolTip bereitgestellt wird. Im folgenden Beispiel wird veranschaulicht, wie Sie diese Eigenschaft richtig angeben:

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

Der Extenderanbieter ist eine Klasse und kann als solche eigene Eigenschaften und Methoden besitzen. Um eine Eigenschaft als die Eigenschaft festzulegen, die für andere Komponenten bereitgestellt werden soll, wenden Sie das ProvidePropertyAttribute-Attribut auf Klassenebene an. Dieses Attribut gibt den Namen der bereitzustellenden Eigenschaft sowie den Objekttyp an, für den diese Eigenschaft verwendet werden kann. Standardmäßig wird die bereitgestellte Eigenschaft nicht als Eigenschaft implementiert, sondern als Methodenpaar. Diesen Methoden muss Get und Set für den Namen der bereitgestellten Eigenschaft vorangestellt werden. Dies wird im folgenden Beispiel veranschaulicht:

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.
   }
}

Für die Implementierung der bereitgestellten Eigenschaft ist ein Hashtable-Objekt oder ein anderes vergleichbares Auflistungsobjekt erforderlich, damit die Eigenschaftenwerte für jedes Steuerelement aufgezeichnet und abgerufen werden können. Ausführliche Informationen finden Sie unter Gewusst wie: Implementieren eines Extenderanbieters.

Jede Extenderklasse muss auch die IExtenderProvider-Schnittstelle implementieren. Diese Schnittstelle besteht aus einer einzigen Methode, der CanExtend-Methode, die einen booleschen Wert zurückgibt und dem Designer mitteilt, ob eine Komponente ein Kandidat für eine Erweiterung ist oder nicht. Sie können beispielweise einen Extender erstellen, der eine Eigenschaft ausschließlich für Steuerelemente bereitstellt. Im folgenden Beispiel sehen Sie, wie die CanExtend-Methode implementiert wird:

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;
}

Siehe auch

Aufgaben

Gewusst wie: Implementieren eines Extenderanbieters

Gewusst wie: Implementieren eines HelpLabel-Extenderanbieters

Referenz

IExtenderProvider

ProvidePropertyAttribute

Weitere Ressourcen

Extenderanbieter