Designerbefehle und das DesignerAction-Objektmodell für Windows Forms

Designerbefehle und das DesignerAction-Objektmodell bieten die allgemeine Möglichkeit, einen Satz von Aktionen für eine Komponente zur Entwurfszeit anzugeben. Der Benutzer greift dann über die Entwurfsoberfläche auf diese Aktionen zu. Hierzu klickt er in der Regel auf das Smarttagsymbol einer Komponente (Smarttag-Glyphe) und wählt eine der im Smarttagbereich angebotenen Aktionen aus. Dieses Modell vereint die verschiedenen Möglichkeiten, wie ein Designer dem Benutzer Befehle anbieten kann.

Smarttags

Mithilfe des Smarttagfeatures können Komponenten und Steuerelemente dem Benutzer kontextbezogene Informationen und Befehle anzeigen. Das Smarttag kann als Ersatz für Designerverben betrachtet werden, da Sie sich für die Anzeige des Smarttagelements sowohl im Smarttagbereich als auch im Kontextmenü zu einer Komponente oder einem Steuerelement entscheiden können.

Ein vollständiges Beispiel für die Implementierung von Smarttags finden Sie unter Gewusst wie: Anfügen von Smarttags an eine Windows Forms-Komponente.

Befehlsklassen für Designer

In der folgenden Tabelle sind die Möglichkeiten aufgeführt, wie Ihnen bei der Entwicklung von Komponenten und Steuerelementen Designerbefehle verfügbar gemacht werden.

Klasse

Beschreibung

MenuCommand

Ein Delegat, der an eine Befehls-ID angefügt ist. Er definiert weder den Befehlstext noch seine Ersetzung oder weitere Metadaten.

DesignerVerb

Ein Menübefehl, der auch seinen Text und weitere Metadaten definiert. Verben werden im Allgemeinen pro Designer angeboten und sind speziell für den jeweiligen Designer bestimmt. Designerverben werden normalerweise in einem Kontextmenü oder im Menü Ansicht auf der Hauptmenüleiste angezeigt.

DesignerActionItem

Ein Menübefehl, der Text und weitere Metadaten zur Beschreibung einer ausführbaren zielgerichteten Aktion definiert. Aktionen erfordern vom Benutzer in der Regel das Durchlaufen eines mehrschrittigen Prozesses (z. B. das Konfigurieren einer Datenquelle für eine Komponente).

Das Push- und das Pullmodell

In der folgenden Tabelle sind die zwei Modelle für den programmgesteuerten Zugriff auf Designerbefehle aufgeführt.

Modell

Beschreibung

Push

Ein Designer fordert ausdrücklich einen Dienst an und fügt diesem Dienst Befehle hinzu.

Pull

Ein Designer wird von einem Dienst nach von ihm angebotenen Befehlen abgefragt.

Vereinheitlichung von vorhandenen Befehlen

Die in der vorhergehenden Tabelle mit den Klassen von Designerbefehlen aufgeführten Befehlsarten weisen eine Reihe von Gemeinsamkeiten auf. Die DesignerAction-API führt sie zusammen und bietet so ein einheitliches Modell für die Verfügbarmachung von Befehlen für die Benutzer eines Designers.

Tipp

Nicht jeder Designer unterstützt jedes Modell. Ein Designer kann die angebotenen Arten der Unterstützung abfragen und als Reaktion die Art und Weise, auf die er selbst Befehle anbietet, ändern. Sowohl Push- als auch Pullmodelle werden zudem u. U. nicht für alle Arten von Befehlen unterstützt. Nicht alle Designer machen Designeraktionen als Smarttags verfügbar. Einige Designer z. B. machen Designeraktionen möglicherweise über ein Toolfenster verfügbar.

DesignerAction-Objektmodell

In der folgenden Tabelle werden die wichtigen Klassen beschrieben, die das DesignerAction-Objektmodell implementieren.

Klasse

Beschreibung

DesignerActionItem

Stellt ein Bereichselement in einem Smarttagbereich dar.

DesignerActionList

Definiert eine Liste von Elementen für das Erstellen eines Smarttagbereichs.

DesignerActionService

Richtet einen Dienst zur Entwurfszeit ein, der die Auflistung der DesignerActionItem-Objekte für Komponenten verwaltet.

DesignerActionTextItem

Stellt ein statisches Textelement in einem Bereich dar. Wird von DesignerActionItem abgeleitet.

DesignerActionPropertyItem

Stellt ein Bereichselement dar, das einer Eigenschaft in einer von DesignerActionList abgeleiteten Klasse zugeordnet wird. Wird von DesignerActionItem abgeleitet.

DesignerActionMethodItem

Stellt ein Bereichselement dar, das einer Methode in einer von DesignerActionList abgeleiteten Klasse zugeordnet wird. Wird von DesignerActionItem abgeleitet.

DesignerActionHeaderItem

Stellt ein statisches Headerelement in einem Smarttagbereich dar. Wird von DesignerActionTextItem abgeleitet.

Verwenden des DesignerAction-Objektmodells

Um Designeraktionen für die Komponente oder das Steuerelement zu aktivieren, leiten Sie von der DesignerActionList-Basisklasse ab. Verwenden Sie diese abgeleitete Klasse zum Auffüllen eines Smarttagbereichs, der die menüähnliche Benutzeroberfläche darstellt.

Die abgeleitete Klasse überschreibt möglicherweise die virtual GetSortedActionItems-Methode, um eine Auflistung von Objekten zurückzugeben, die von DesignerActionItem abgeleitet sind. Diese Objekte stellen die Bereichselemente dar. Die einzelnen Elemente werden je nach Typ im entsprechenden Bereich angezeigt. Zum Beispiel wird ein DesignerActionTextItem als statische Textbezeichnung angezeigt. Aktive, durch den DesignerActionPropertyItem-Typ und den DesignerActionMethodItem-Typ dargestellte Bereichselemente verfügen über eine entsprechende öffentlich aufrufbare Eigenschaft bzw. Methode, die die Funktionalität für das Element implementiert.

Sobald die abgeleitete Klasse erstellt ist, kann sie einem Steuerelement auf zwei unterschiedliche Arten hinzugefügt werden:

  • Bei Verwendung des Pullmodells fügen Sie der ActionLists-Eigenschaft der ComponentDesigner-Klasse eine Instanz der abgeleiteten Klasse hinzu. Auf diese Weise können erbende Klassen weitere Aktionslisten bereitstellen und ihre Elemente zusammengeführt werden.

  • Bei Verwendung des Pushmodells rufen Sie Add auf, um der vom globalen DesignerActionService verwalteten Auflistung eine Instanz der abgeleiteten Klasse hinzuzufügen. Diese Aktionslisten werden mit denen in der vom ComponentDesigner verwalteten Auflistung zusammengeführt.

Ein DesignerActionPropertyItem wird im Designer durch den ihm entsprechenden UITypeEditor dargestellt. Ein DesignerActionMethodItem wird im Designer durch ein aktives Element der Benutzeroberfläche (z. B. einen Link) dargestellt, das eine vom Programmierer bereitgestellte Methode aufruft. Die Implementierung der GetSortedActionItems-Methode in der Aktionsliste gibt die Eigenschaften und Methoden in der Reihenfolge zurück, in der sie im Smarttagbereich angezeigt werden sollen.

Ein vollständiges Beispiel für die Implementierung von Smarttags finden Sie unter dem Thema Gewusst wie: Anfügen von Smarttags an eine Windows Forms-Komponente.

In Aktionslisten vorhandene Verben

Steuerelemente und Komponenten, in denen DesignerVerb-Implementierungen vorhanden sind, erhalten automatisch DesignerActionList-Unterstützung. Die Entwurfsumgebung fragt den Designer einer Komponente für eine Aktionsliste ab. Ist kein solcher verfügbar, wird ein Designer für vorhandene Verben erstellt.

Aktionslistenelemente im Kontextmenü

Wenn Sie möchten, dass ein Element sowohl im Kontextmenü als auch in einer Aktionsliste angezeigt wird, können Sie für DesignerActionMethodItem das IncludeAsDesignerVerb-Flag festlegen.

Beim Aufruf von Add wird die Aktionsliste nach vorhandenen DesignerActionMethodItem durchsucht, für die das IncludeAsDesignerVerb-Flag festgelegt ist. Wenn das Flag festgelegt ist, wird die AddVerb-Methode für das Element aufgerufen, damit es den Verben der Komponente und somit auch ihrem Kontextmenü hinzugefügt wird.

Änderungen an Designerbefehlstypen

Die MenuCommand-Klasse und die DesignerVerb-Klasse von .NET Framework, Version 1.1, wurden geringfügig verändert, um die Unterstützung des DesignerAction-Objektmodells zu ermöglichen. Beide Typen machen nun eine neue Eigenschaft, Properties, verfügbar, bei der es sich um ein IDictionary zum Speichern aller öffentlichen Eigenschaften für das Befehlsobjekt handelt. Der Wörterbuchschlüssel ist der Name der öffentlichen Eigenschaft. Dies ermöglicht die generische Enumeration von Eigenschaften und stellt eine konsistente Basis zur Verfügung, von der aus neue Eigenschaften ohne gleichzeitige Änderung der Klassendefinition hinzugefügt werden können.

Außerdem bietet die MenuCommandService-Klasse eine Standardimplementierung von IMenuCommandService und führt die ordnungsgemäße Integration der Verben aus. Diese Klasse löst Ereignisse aus, die Hinzufügungen und Entfernungen von Befehlen melden. Mit dieser Klasse können Sie eine auf den Ergebnissen dieser Ereignisse basierende Benutzeroberfläche erstellen. MenuCommandService sowie IMenuCommandService sind über den Dienstcontainer verfügbar.

Siehe auch

Aufgaben

Gewusst wie: Anfügen von Smarttags an eine Windows Forms-Komponente

Referenz

DesignerActionList

ComponentDesigner

DesignerVerb

MenuCommand

MenuCommandService

Weitere Ressourcen

Erweitern der Entwurfszeitunterstützung