Freigeben über


Visual Studio-Entwurfszeitunterstützung für benutzerdefinierte Steuerelemente

Wie Sie bei der Interaktion mit dem Windows Forms-Designer bemerkt haben, gibt es viele verschiedene Entwurfszeitfeatures, die von den Windows Forms-Steuerelementen angeboten werden. Zu den Features des Visual Studio-Designers gehören Ausrichtungslinien, Aktionselemente und das Eigenschaftenraster. All diese Features bieten Ihnen eine einfachere Möglichkeit, während der Entwurfszeit mit einem Steuerelement zu interagieren und dieses anzupassen. Dieser Artikel enthält eine Übersicht darüber, welche Form der Unterstützung Sie Ihren benutzerdefinierten Steuerelementen hinzufügen können, um die Entwurfszeit für Consumer Ihrer Steuerelemente zu verbessern.

Unterschiede zu .NET Framework

Viele grundlegende Designelemente von benutzerdefinierten Steuerelementen sind gegenüber .NET Framework unverändert geblieben. Wenn Sie jedoch erweiterte Anpassungsfeatures des Designers verwenden (z. B. Aktionslisten, Typkonverter, benutzerdefinierte Dialogfelder), sehen Sie sich einigen einzigartigen Szenarien gegenüber.

Visual Studio ist eine .NET Framework-basierte Anwendung, und der visual Designer, den Sie für Windows Forms sehen, basiert auch auf .NET Framework. Bei einem .NET Framework-Projekt werden sowohl die Visual Studio-Umgebung als auch die Windows Forms-App, die innerhalb desselben Prozesses entworfen wird, devenv.exe ausgeführt. Dies stellt ein Problem dar, wenn Sie mit einer Windows Forms .NET -App (nicht .NET Framework) arbeiten. .NET und .NET Framework können nicht innerhalb desselben Prozesses verwendet werden. Daher verwendet Windows Forms .NET einen anderen Designer, den "out-of-process"-Designer.

Der Out-of-Process-Designer ist ein Prozess namensDesignToolsServer.exeund wird zusammen mit dem devenv.exe Prozess von Visual Studio ausgeführt. Der DesignToolsServer.exe Prozess wird in derselben Version und Plattform ausgeführt, z. B. .NET 9 und x64 von .NET, auf die Ihre App ausgerichtet ist. Wenn Ihr benutzerdefiniertes Steuerelement ui in Visual Studio anzeigen muss, muss ihr benutzerdefiniertes Steuerelement eine Clientserverarchitektur implementieren, um die Kommunikation zu und von devenv.exezu erleichtern. Weitere Informationen finden Sie unter Der Designer ändert sich seit .NET Framework.

Eigenschaftenfenster

Im Eigenschaftenfenster von Visual Studio werden die Eigenschaften und Ereignisse für das ausgewählte Steuerelement oder Formular dargestellt. Dies ist in der Regel die erste Anpassung, die Sie für ein benutzerdefiniertes Steuerelement oder eine benutzerdefinierte Komponente vornehmen.

Die folgende Abbildung zeigt ein Button Steuerelement, das im Visual Designer ausgewählt ist, und das Eigenschaftenraster mit den Eigenschaften der Schaltfläche:

Der Windows Forms-Designer in Visual Studio mit einer Schaltfläche und dem Eigenschaftenfenster

Sie können verschiedene Aspekte steuern, z. B. wie Informationen zu Ihrem benutzerdefinierten Steuerelement im Eigenschaftenraster angezeigt werden. Attribute werden entweder auf die Klasse des benutzerdefinierten Steuerelements oder auf Klasseneigenschaften angewandt.

Attribute für Klassen

In der folgenden Tabelle sind die Attribute aufgeführt, die Sie anwenden können, um das Verhalten Ihrer benutzerdefinierten Steuerelemente und Komponenten zur Entwurfszeit anzugeben.

Merkmal BESCHREIBUNG
DefaultEventAttribute Gibt das Standardereignis für eine Komponente an.
DefaultPropertyAttribute Gibt die Standardeigenschaft für eine Komponente an.
DesignerAttribute Gibt die Klasse an, die zum Implementieren von Entwurfszeitdiensten für eine Komponente verwendet wird.
DesignerCategoryAttribute Gibt an, dass der Designer für eine Klasse zu einer bestimmten Kategorie gehört.
ToolboxItemAttribute Stellt ein Attribut eines Werkzeugkastenelements dar.
ToolboxItemFilterAttribute Gibt die Filterzeichenfolge und den Filtertyp an, der für ein Toolboxelement verwendet werden soll.

Attribute für Eigenschaften

Die folgende Tabelle enthält die Attribute, die Sie auf Eigenschaften oder andere Member der benutzerdefinierten Steuerelemente und Komponenten anwenden können.

Merkmal BESCHREIBUNG
AmbientValueAttribute Gibt den Wert an, der an eine Eigenschaft übergeben werden soll, damit die Eigenschaft ihren Wert aus einer anderen Quelle abrufen kann. Dies wird als Umgebung bezeichnet.
BrowsableAttribute Gibt an, ob eine Eigenschaft oder ein Ereignis im Fenster Eigenschaften angezeigt werden soll.
CategoryAttribute Gibt den Namen der Kategorie an, in der die Eigenschaft oder das Ereignis bei der Anzeige in einem PropertyGrid-Steuerelement gruppiert werden soll, das auf den Modus Categorized festgelegt ist.
DefaultValueAttribute Gibt den Standardwert für eine Eigenschaft an.
DescriptionAttribute Gibt die Beschreibung einer Eigenschaft oder eines Ereignisses an.
DisplayNameAttribute Gibt den Anzeigenamen für eine Eigenschaft, ein Ereignis oder eine öffentliche Methode an, die bzw. das keinen Wert zurückgibt und keine Argumente akzeptiert.
EditorAttribute Gibt den Editor an, der zum Ändern einer Eigenschaft verwendet wird.
EditorBrowsableAttribute Gibt an, dass eine Eigenschaft oder Methode in einem Editor angezeigt werden kann.
HelpKeywordAttribute Gibt das Kontextschlüsselwort für eine Klasse oder ein Element an.
LocalizableAttribute Gibt an, ob eine Eigenschaft lokalisiert werden soll.
PasswordPropertyTextAttribute Gibt an, dass die Textdarstellung eines Objekts durch Zeichen wie Sternchen verdeckt wird.
ReadOnlyAttribute Gibt an, ob die Eigenschaft, an die dieses Attribut gebunden ist, schreibgeschützt ist oder ob zur Entwurfszeit Lese-/Schreibzugriff gewährt wird.
RefreshPropertiesAttribute Gibt an, dass das Eigenschaftenraster aktualisiert werden soll, wenn sich der zugeordnete Eigenschaftswert ändert.
TypeConverterAttribute Wird angegeben, welcher Typ als Konverter für das Objekt verwendet wird, an das dieses Attribut gebunden ist.

Designer für benutzerdefinierte Steuerelemente

Die Entwurfszeitfunktionalität von benutzerdefinierten Steuerelementen kann durch die Erstellung eines zugehörigen benutzerdefinierten Designers erweitert werden. Standardmäßig wird Ihr benutzerdefiniertes Steuerelement auf der Entwurfsoberfläche des Hosts angezeigt, und zwar genau so, wie es zur Laufzeit dargestellt wird. Mit einem benutzerdefinierten Designer können Sie die Entwurfszeitansicht des Steuerelements verbessern sowie Aktionselemente, Ausrichtungslinien und andere Elemente hinzufügen, die bei der Bestimmung des Layouts und der Konfiguration des Steuerelements helfen können. Beispielsweise fügt der ToolStrip-Designer zur Entwurfszeit zusätzliche Steuerelemente hinzu, mit denen die einzelnen Elemente hinzugefügt, entfernt und konfiguriert werden können, wie in der folgenden Abbildung gezeigt:

Ein Windows Forms-Designer in Visual Studio mit der Entwurfszeitansicht eines geteilten Containers.

Sie können eigene benutzerdefinierte Designer erstellen, indem Sie die folgenden Schritte ausführen:

  1. Hinzufügen von Verweisen auf das Microsoft.WinForms.Designer.SDK NuGet-Paket.
  2. Erstellen Sie einen Typ, der von der Microsoft.DotNet.DesignTools.Designers.ControlDesigner-Klasse erbt.
  3. Markieren Sie in Ihrer Benutzersteuerelementklasse die Klasse mit dem System.ComponentModel.DesignerAttribute-Klassenattribute, und übergeben Sie den Typ, den Sie im vorherigen Schritt erstellt haben.

Weitere Informationen finden Sie im Abschnitt Unterschiede zu .NET Framework.

Aktionselemente

Designeraktionen sind kontextabhängige Menüs, mit denen häufige Aufgaben schnell ausgeführt werden können. Wenn Sie z. B. einem Formular ein TabControl hinzufügen, können Sie Registerkarten über das Steuerelement hinzufügen und entfernen. Die Registerkarten werden im Eigenschaftenfenster über die TabPages-Eigenschaft verwaltet, die einen Registerkarten-Auflistungs-Editor anzeigt. Anstatt zu erzwingen, dass der Benutzer immer die Eigenschaften Liste durchläuft, die nach der TabPages-Eigenschaft sucht, stellt die TabControl eine Smarttag-Schaltfläche bereit, die nur angezeigt wird, wenn das Steuerelement ausgewählt wird, wie in den folgenden Abbildungen gezeigt:

Der Windows Forms-Designer in Visual Studio mit der Smarttag-Schaltfläche eines Registerkartensteuerelements.

Wenn Sie das Smarttag auswählen, wird die Aktionsliste angezeigt:

Der Windows Forms-Designer in Visual Studio mit gedrückter Smarttag-Schaltfläche eines Registerkartensteuerelements, wodurch eine Liste der Aktionen angezeigt wird.

Indem Sie die Aktionen Registerkarte hinzufügen und Registerkarte entfernen hinzufügen, ändert der Designer das Steuerelements so, dass Sie schnell eine Registerkarte hinzufügen oder entfernen können.

Erstellen einer Aktionselementliste

Aktionselementlisten werden über den ControlDesigner-Typ bereitgestellt, den Sie erstellen. Die folgenden Schritte stellen einen grundlegenden Leitfaden für das Erstellen eigener Aktionslisten dar:

  1. Hinzufügen von Verweisen auf das Microsoft.WinForms.Designer.SDK NuGet-Paket.
  2. Erstellen Sie eine neue Aktionslistenklasse, die von Microsoft.DotNet.DesignTools.Designers.Actions.DesignerActionList erbt.
  3. Fügen Sie der Aktionsliste die Eigenschaften hinzu, auf die Benutzer und Benutzerinnen Zugriff haben sollen. Beispielsweise wird durch das Hinzufügen der Eigenschaft bool oder Boolean (in Visual Basic) zur Klasse ein CheckBox-Steuerelement in der Aktionsliste erstellt.
  4. Führen Sie die Schritte im Abschnitt Designer für benutzerdefinierte Steuerelemente aus, um einen neuen Designer zu erstellen.
  5. Überschreiben Sie in der designer-Klasse die ActionLists-Eigenschaft, die den Typ Microsoft.DotNet.DesignTools.Designers.Actions.DesignerActionListCollection zurückgibt.
  6. Fügen Sie Ihre Aktionsliste einer DesignerActionListCollection-Instanz hinzu, und geben Sie sie zurück.

Ein Beispiel für eine Aktionsliste finden Sie im GitHub-Repository "Windows Forms Designer Extensibility Documents & Samples", insbesondere im TileRepeater.Designer.Server/ControlDesigner Ordner.

Im Eigenschaftenfenster werden die meisten Eigenschaften einfach im Raster bearbeitet, z. B. wenn der Unterstützungstyp der Eigenschaft eine Enumeration, ein boolescher Wert oder eine Zahl ist.

Visual Studio Eigenschaftenfenster für eine Windows Forms-App mit der Ausrichtungseigenschaft.

Manchmal ist eine Eigenschaft jedoch komplexer und erfordert ein benutzerdefiniertes Dialogfeld, über das ihre Eigenschaften geändert werden können. Die Font-Eigenschaft ist beispielsweise vom Typ System.Drawing.Font, der viele Eigenschaften enthält, die das Erscheinungsbild der Schriftart ändern. Dies ist im Eigenschaftenfenster nicht einfach darzustellen, sodass für diese Eigenschaft ein benutzerdefiniertes Dialogfeld verwendet wird, um die Schriftart zu bearbeiten:

Das Visual Studio-Dialogfeld

Wenn Ihre benutzerdefinierten Steuerelementeigenschaften die von Windows Forms bereitgestellten integrierten Typ-Editoren verwenden, können Sie die EditorAttribute Eigenschaften mit dem entsprechenden .NET Framework-Editor markieren, den Visual Studio verwenden soll. Durch die Verwendung der integrierten Editoren vermeiden Sie die Anforderung, die vom Out-of-Process-Designer bereitgestellte Clientserverkommunikation des Proxyobjekts zu replizieren.

Verwenden Sie beim Verweisen auf einen integrierten Typ-Editor den .NET Framework-Typ, nicht den .NET-Typ:

[Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
        "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
public string? Filename { get; set; }
<Editor("System.Windows.Forms.Design.FileNameEditor, System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>
Public Property Filename As String