Übersicht über Extenderanbieter
Ein Extenderanbieter ist eine Komponente, die Eigenschaften für andere Komponenten bereitstellt. Wenn z. B. einem Formular eine ToolTip-Komponente hinzugefügt wird, stellt diese für jedes Steuerelement auf dem Formular eine Eigenschaft mit dem Namen ToolTip bereit. Die ToolTip-Eigenschaft wird dann in jedem angefügten PropertyGrid-Steuerelement angezeigt. Zur Entwurfszeit können Sie einen Wert für diese Eigenschaft festlegen.
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 in jedem PropertyGrid angezeigt, das an die gerade geänderte Komponente angefügt ist. Zur Laufzeit dagegen können Sie über die Komponente selbst nicht auf die Eigenschaft zugreifen. Stattdessen rufen Sie die GetToolTip-Methode der ToolTip-Komponente auf.
Implementierung
In der folgenden Liste sind die für das Implementieren eines Extenderanbieters erforderlichen Schritte beschrieben:
Verwenden Sie das ProvidePropertyAttribute-Attribut, um die vom Extenderanbieter bereitgestellte Eigenschaft anzugeben.
Implementieren Sie die bereitgestellte Eigenschaft.
Verfolgen Sie, welche Steuerelemente die bereitgestellte Eigenschaft empfangen.
Implementieren Sie die IExtenderProvider-Schnittstelle.
Ausführliche Informationen finden Sie unter Gewusst wie: Implementieren eines Extenderanbieters. Ein vollständiges Beispiel finden Sie unter Gewusst wie: Implementieren eines HelpLabel-Extenderanbieters.
Das ProvideProperty-Attribut
Der Extenderanbieter ist eine Klasse und besitzt als solche eigene Eigenschaften und Methoden. 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.
Implementieren der bereitgestellten Eigenschaft
Standardmäßig wird die bereitgestellte Eigenschaft nicht als Eigenschaft implementiert, sondern als Methodenpaar. Sie müssen diese Methoden als GetEigenschaftenname und SetEigenschaftenname bezeichnen. Wenn die Implementierung des Extenderanbieters z. B. eine Eigenschaft mit dem Namen DemoText bereitstellt, nennen Sie die Methoden GetDemoText und SetDemoText.
Diese Methoden akzeptieren einen einzelnen Component-Parameter, über den Sie verfolgen können, welcher Eigenschaftswert welcher Komponente zugeordnet ist.
Nachverfolgen, welche Steuerelemente die bereitgestellte Eigenschaft empfangen
Für die Implementierung der bereitgestellten Eigenschaft ist ein IDictionary oder ein anderes Auflistungsobjekt erforderlich, damit die Eigenschaftswerte für jede Komponente aufgezeichnet und abgerufen werden können.
Sie können z. B. die Komponenteninstanz als Key für einen DictionaryEntry verwenden, und den Wert der Eigenschaft als Value des DictionaryEntry. Bei Aufruf der GetEigenschaftenname-Methode fragt die Implementierung dann die Auflistung für den der jeweiligen Komponente entsprechenden Eigenschaftswert ab.
Implementieren der IExtenderProvider-Schnittstelle
Jede Extenderklasse muss 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.
Während ein Extenderanbieter Eigenschaften für beliebige Komponenten zur Verfügung stellen kann, sind bei der Implementierung normalerweise bestimmte Funktionen dafür verantwortlich, dass dies nur für bestimmte Kategorien von Komponenten möglich ist. Sie können beispielweise einen Extender erstellen, der eine Eigenschaft ausschließlich für Steuerelemente bereitstellt. Die Implementierung der CanExtend-Methode kann diese Einschränkung erzwingen.
Siehe auch
Aufgaben
Gewusst wie: Implementieren eines Extenderanbieters
Gewusst wie: Implementieren eines HelpLabel-Extenderanbieters