Basisklassen für Designer

Alle Designer implementieren die IDesigner-Schnittstelle, die die grundlegenden Designer-Schnittstellenmethoden definiert. .NET Framework stellt ebenfalls eine Gruppe von Designer-Basisklassen mit Methoden für Designer bereit, die bestimmte Komponenten- und Steuerelementtypen unterstützen.

IDesigner-Schnittstelle

Eine Designerklasse muss die IDesigner-Schnittstelle implementieren, wie anhand des folgenden Codebeispiels gezeigt wird.

Public Interface IDesigner
   Sub Dispose()
   Sub Initialize(component As IComponent)
   ' Other methods.
   ...
   ReadOnly Property Component() As IComponent
   ' Other properties.
   ...
End Interface
public interface IDesigner {
   void Dispose();
   void Initialize(IComponent component);
   // Other methods.
   ...
   IComponent Component {
        get;
   }
   // Other properties.
   ...
}

Die Initialize-Methode eines IDesigner wird aufgerufen, nachdem die Komponente für den Designer positioniert und initialisiert und der Designer erstellt wurde. Sie können die Initialize-Methode überschreiben, um Aktionen durchzuführen, die während der Initialisierung der Komponente oder des Designers ausgeführt werden sollen. Sie können die Initialisierung der Komponente durch einen Konstruktor nicht ersetzen. Sie können sie aber erweitern oder die initialisierten Eigenschaften zurücksetzen. Durch diese Initialisierungsmethode wird die Component-Eigenschaft eines IDesigner festgelegt. Wenn Sie diese Methode überschreiben, sollten Sie stets base.Initialize(component) über die Initialize-Methode aufrufen. Auf die Komponente eines IDesigner können Sie über dessen Component-Eigenschaft zugreifen.

Die Component-Eigenschaft gewährt Zugriff auf die Komponente, der der Designer zugeordnet ist. Diese Eigenschaft wird festgelegt, wenn das Designerobjekt zum ersten Mal erstellt und die zugehörige Initialize-Methode aufgerufen wird. Die Komponente verfügt über eine damit verbundene Site, die vom Designer verwendet werden kann, um Dienste vom Designerhost abzurufen.

Die DoDefaultAction-Methode wird aufgerufen, wenn auf eine Komponente oder ein Steuerelement ein Doppelklick ausgeführt wird.

Die Verbs-Eigenschaft kann überschrieben werden, um eine DesignerVerbCollection zurückzugeben, die die notwendigen Objekte für die Erweiterung der Menüelemente eines Kontextmenüs für eine Komponente enthält.

Die Dispose-Methode wird aufgerufen, wenn das Designerobjekt zerstört werden soll. Sie wird immer dann aufgerufen, wenn eine Komponente aus dem Entwurfscontainer entfernt wird.

Basisdesignerklasse für Komponenten

Die ComponentDesigner-Klasse implementiert die IDesigner-Schnittstelle und die IDesignerFilter-Schnittstelle, um zusätzliche Methoden bereitzustellen, die für einige Komponentendesigner nützlich sein können.

Basisdesignerklasse für Windows Forms-Steuerelemente

Die Basisdesignerklasse für Windows Forms-Steuerelemente ist ControlDesigner. Diese Klasse wird von der ComponentDesigner-Klasse abgeleitet und stellt zusätzliche nützliche Methoden zum Anpassen der Darstellung und des Verhaltens eines Windows Forms-Steuerelements bereit. Eine Beispielimplementierung eines Windows Forms-Designers finden Sie unter Gewusst wie: Implementieren eines Designers für ein Steuerelement.

Die DocumentDesigner-Klasse bietet einen Basisdesigner zum Erweitern des Entwurfsmodusverhaltens eines Control, das geschachtelte Steuerelemente unterstützt und Bildlaufmeldungen empfängt, sowie zum Bereitstellen einer Entwurfsmodusansicht auf Stammebene für ein solches Steuerelement. Weitere Informationen finden Sie unter Gewusst wie: Erstellen eines Windows Forms-Steuerelements, das Entwurfszeitfeatures nutzt.

Basisdesignerklasse für ASP.NET-Serversteuerelemente

Die Basisdesignerklasse für ASP.NET-Serversteuerelemente ist ControlDesigner. Diese Klasse stellt Basisfunktionen für benutzerdefinierte HTML-Darstellung zur Entwurfszeit bereit. Weitere Basisklassen für Aufgaben wie die Vorlagenbearbeitung werden unter Entwurfszeitunterstützung für Web Forms beschrieben.

Basisklassen für die Integration zur Entwurfszeit

Die TypeConverter-Klasse stellt eine Basisklasse zum Konvertieren eines Typs in eine und aus einer Textdarstellung bereit. Weitere Informationen über Typkonverter finden Sie unter Gewusst wie: Implementieren eines Typkonverters oder Verallgemeinerte Typkonvertierung.

Die UITypeEditor-Klasse stellt eine Basisklasse bereit, die aus einem benutzerdefinierten Typ-Editor für die Entwurfszeitumgebung abgeleitet und für die Implementierung eines solchen Typ-Editors erweitert werden kann. Weitere Informationen über die Implementierung eines UITypeEditor finden Sie unter Übersicht über Typ-Editoren für Benutzeroberflächen.

Basisklassen für die Darstellung und das Verhalten von Designern

Die Behavior-Klasse kann zur Entwicklung jedes beliebigen Typs von Benutzeroberflächenverhalten erweitert werden, einschließlich Auswahl, Ziehen und Größenänderung. Zeichenvorgänge und Trefferprüfung werden von der Glyph-Klasse ausgeführt.

Weitere Informationen finden Sie unter Übersicht über den Behavior-Dienst.

Basisklassen für Designerladeprogramme

Die BasicDesignerLoader-Klasse stellt eine Implementierung der IDesignerLoaderService-Schnittstelle bereit. Ein BasicDesignerLoader ist eine vollständige Implementierung eines Designerladeprogramms ohne jeglichen Bezug auf ein Dauerhaftigkeitsformat.

CodeDomDesignerLoader ist eine abstrakte Klasse, die ein vollständiges Designerladeprogramm auf der Grundlage von CodeDOM (Code Document Object Model) bereitstellt.

Basisklassen für die Designerserialisierung

Die CodeDomSerializerBase-Klasse stellt eine Basisklasse für CodeDomSerializer-Klassen bereit. Die CodeDomSerializerBase-Klasse wird von der CodeDomSerializer-Klasse und derTypeCodeDomSerializer-Klasse gemeinsam als Basisklasse verwendet.

Die DesignerSerializationManager-Klasse stellt eine Implementierung der IDesignerSerializationManager-Schnittstelle bereit.

Weitere Informationen finden Sie unter Übersicht über die Designerserialisierung.

Basisklasse für Smarttags

Die DesignerActionList-Klasse stellt die Basisklasse für Typen bereit, die eine Liste von Elementen für die Erstellung eines Smarttagbereichs definieren. Weitere Informationen finden Sie unter Gewusst wie: Anfügen von Smarttags an eine Windows Forms-Komponente.

Basisklasse für benutzerdefiniertes Layout

Die LayoutEngine-Klasse stellt die Basisklasse für das Implementieren von Layoutmodulen bereit. Das TableLayoutPanel-Steuerelement und das FlowLayoutPanel-Steuerelement verwenden die LayoutEngine-Klasse für die Bereitstellung des Layoutverhaltens. Weitere Informationen finden Sie unter Gewusst wie: Implementieren eines benutzerdefinierten Layoutmoduls.

Standarddesigner

.NET Framework SDK stellt eine Gruppe von Designern bereit, mit denen bestimmte Typen von Komponenten unterstützt werden. Diese Designer tragen den Namen der von ihnen entworfenen Komponenten mit dem Wort Designer als Suffix. Der Designer für die System.Windows.Forms.Control-Klasse wird z. B. mit System.Windows.Forms.Design.ControlDesigner bezeichnet.

Allgemeine Funktionen von Designern

Zugreifen auf Entwurfszeitdienste aus einem Designer

Die meisten Typen von Entwurfszeitdiensten können durch eine GetService-Methode angefordert werden, indem der Typ des anzufordernden Diensts übergeben wird. Für Component und ComponentDesigner ist jeweils eine GetService-Methode vorhanden. Es ist auch eine GetService-Methode für den IServiceProvider vorhanden, der durch die ISite implementiert wird, die von der Site-Eigenschaft einer IComponent im Entwurfsmodus zurückgegeben wird.

Im folgenden Code wird veranschaulicht, wie eine IDesignerHost-Dienstschnittstelle und ein IMenuCommandService mithilfe einer GetService-Methode abgerufen werden.

Weitere Informationen finden Sie unter Gewusst wie: Zugriff auf Entwurfszeitdienste.

Im folgenden Code wird veranschaulicht, wie einen Dienst aus einer Dienstanbieterschnittstelle im Entwurfsmodus abgerufen wird.

' Obtain an IDesignerHost service from the design-time environment.
Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
' Obtain an IMenuCommandService service.
Dim mcs As IMenuCommandService = CType(Me.Component.Site.GetService(GetType(IMenuCommandService)), IMenuCommandService)
// Obtain an IDesignerHost service from the design-time environment.
IDesignerHost host = (IDesignerHost)this.Component.Site.GetService(typeof(IDesignerHost));
// Obtain an IMenuCommandService service.
IMenuCommandService mcs = 
(IMenuCommandService)this.Component.Site.GetService(typeof(IMenuCommandService));

Zugreifen auf Projektkomponenten aus einem Designer

Ein Designer kann auf die Komponenten in einem Dokument im Entwurfsmodus zugreifen, indem er auf die Components-Auflistung der Container-Eigenschaft einer IDesignerHost-Dienstschnittstelle zugreift. Im folgenden Codebeispiel wird das Zugreifen auf Komponenten im aktuellen Projekt im Entwurfsmodus veranschaulicht.

' Obtains an IDesignerHost service from the design-time environment.
Dim host As IDesignerHost = CType(Me.Component.Site.GetService(GetType(IDesignerHost)), IDesignerHost)
' Gets the components container for the current design-time project.
Dim container As IContainer = host.Container
' The host.Container IContainer contains each IComponent in the project.
// Obtains an IDesignerHost service from the design-time environment.
IDesignerHost host = (IDesignerHost)this.Component.Site.GetService(typeof(IDesignerHost));
// Gets the components container for the current design-time project.
IContainer container = host.Container;
// The host.Container IContainer contains each IComponent in the project.

Wenn Sie Zugriff auf die Komponentenauflistung haben, können Sie mithilfe von TypeDescriptor-Methoden und PropertyDescriptor-Objekten Typen identifizieren und die Eigenschaftenwerte von Komponenten festlegen. Sie können auch die CreateComponent-Methode der IDesignerHost-Schnittstelle zum Erstellen von Komponenten verwenden.

Erweitern eines Designers

Beim Ableiten von einer Komponente, der ein Designer zugeordnet ist, wird der Designer der Basisklasse standardmäßig auch der abgeleiteten Komponente zugeordnet. Sie können der Komponente einen anderen Designer zuordnen, indem Sie ein DesignerAttribute-Attribut anwenden, das den der Komponente zuzuordnenden Designertyp angibt. Eine abgeleitete Komponente verfügt normalerweise über einen Designer, der den Basisdesigner erweitert.

Weitere Informationen finden Sie unter Gewusst wie: Implementieren eines Designers für ein Steuerelement.

So erweitern Sie einen Designer

  1. Definieren Sie eine Klasse, die von der Basisdesignerklasse abgeleitet wird.

  2. Wenden Sie ein DesignerAttribute an, um die neue Designerklasse der Komponente zuzuordnen.

Durch das folgende Codebeispiel wird ein Designer definiert, der den System.Web.UI.Design.WebControls.LabelDesigner erweitert und ihn einer benutzerdefinierten Bezeichnung zuordnet, die ihrerseits System.Web.UI.WebControls.Label erweitert.

Namespace MyControls.Design
   Public Class MyLabelDesigner
      Inherits System.Web.UI.Design.WebControls.LabelDesigner
   End Class
End Namespace
Namespace MyControls
   <Designer(GetType(MyControls.Design.MyLabelDesigner))> _
   Public Class MyLabel
      Inherits System.Web.UI.WebControls.Label
   End Class
End Namespace
namespace MyControls.Design {
    public class MyLabelDesigner : System.Web.UI.Design.WebControls.LabelDesigner {}
}
namespace MyControls {
[Designer(typeof(MyControls.Design.MyLabelDesigner))]
    public class MyLabel : System.Web.UI.WebControls.Label {}
}

Hinweis

Wenn Sie einen Designer für eine versiegelte Klasse definieren oder nicht möchten, dass andere Klassen den Designer verwenden bzw. von diesem erben, können Sie die Designerklasse als assemblyinterne Klasse festlegen. Der Designerhost wird dann weiterhin eine Instanz des Designers erstellen können, die jedoch nicht mehr zum öffentlichen Objektmodell beiträgt.

Siehe auch

Aufgaben

Gewusst wie: Zugriff auf Entwurfszeitdienste
Gewusst wie: Zugriff auf Entwurfszeitunterstützung in Windows Forms

Konzepte

Filtern von Metadaten
Designerverben
Gewusst wie: Implementieren eines Designers für ein Steuerelement

Weitere Ressourcen

Benutzerdefinierte Designer
Entwurfszeitunterstützung für Web Forms