Übersicht über Typ-Editoren für Benutzeroberflächen
Durch das Implementieren eines Typ-Editors für die Benutzeroberfläche können Sie für komplexe Eigenschaftentypen eine benutzerdefinierte Entwurfszeitumgebung bereitstellen.
Anzeigen und Bearbeiten von benutzerdefinierten Typen
Wenn Sie einen benutzerdefinierten Typ als Eigenschaft verfügbar machen, können Sie den Wert der Eigenschaft auf drei unterschiedliche Arten in einem PropertyGrid bearbeiten:
Sie können die Eigenschaft direkt als Zeichenfolge bearbeiten. Dies erfordert einen TypeConverter für den benutzerdefinierten Typ. Weitere Informationen finden Sie unter Gewusst wie: Implementieren eines Typkonverters.
Sie können die Eigenschaft über eine Dropdown-Benutzeroberfläche bearbeiten. Dies ist besonders bei Eigenschaften sinnvoll, die mit einem einzelnen Mausklick festgelegt werden können.
Sie können die Eigenschaft mit einem modalen Dialogfeld bearbeiten. Wenn die Eigenschaft besonders komplex ist, ist für ihre ordnungsgemäße Bearbeitung möglicherweise ein komplettes Dialogfeld notwendig.
Um entweder die Bearbeitung über einen einzelnen Mausklick oder ein modales Dialogfeld zu aktivieren, müssen Sie einen Typ-Editor für die Benutzeroberfläche implementieren, der mit einem PropertyGrid interagiert.
Dropdown-Editoren
Dropdown-Editoren sind ideal für Typen, die mit einem einzelnen Mausklick festgelegt werden können. Die Dock-Eigenschaft und die BackColor-Eigenschaft der Control-Klasse bearbeiten Sie z. B. mit einem Dropdown-Editor in einem PropertyGrid.
Der Zugriff auf einen Dropdown-Typ-Editor für die Benutzeroberfläche erfolgt durch Klicken auf die Pfeilschaltfläche (), die in einem PropertyGrid neben der ausgewählten Eigenschaft angezeigt wird. Die benutzerdefinierte Benutzeroberfläche wird angezeigt. Sie ist an das PropertyGrid angefügt. Der obere Rand des Fensters ist entlang dem unteren Rand des Eigenschafteneintrags positioniert, und die Fensterbreite entspricht der Breite des Eigenschafteneintrags. Nachdem der Benutzer eine Auswahl getroffen hat, muss dieses Editorfenster ebenfalls geschlossen werden. Die Implementierung muss die DropDownControl-Methode aufrufen, um das Fenster des Typ-Editors für die Benutzeroberfläche in der Entwurfsumgebung zu positionieren und seine Größe anzupassen, und Sie selbst müssen die CloseDropDown-Methode zum Schließen des Fensters aufrufen.
Modale Dialog-Editoren
Modale Editoren sind bei Typen von Nutzen, für die eine vollständig interaktive Benutzeroberfläche erforderlich ist. Modale Editoren sind z. B. Auflistungs-Editoren wie der Registerkarten-Auflistungs-Editor von TabControl oder das Dialogfeld Spalten bearbeiten des DataGridView-Steuerelements.
Der Zugriff auf einen modalen Typ-Editor für die Benutzeroberfläche erfolgt durch Klicken auf die Schaltfläche mit den Auslassungszeichen (), die in einem PropertyGrid neben der ausgewählten Eigenschaft angezeigt wird. Das modale Dialogfeld wird angezeigt, und der Benutzer interagiert damit wie mit einem typischen Dialogfeld. Die Implementierung muss die ShowDialog-Methode aufrufen, um das Dialogfeld in der Entwurfsumgebung zu positionieren und seine Größe anzupassen.
Implementieren eines Typ-Editors für die Benutzeroberfläche
Um einen benutzerdefinierten Typ-Editor für die Benutzeroberfläche zu implementieren, müssen Sie mindestens folgende Aufgaben ausführen:
Definieren Sie eine Klasse, die von UITypeEditor abgeleitet ist.
Überschreiben Sie die GetEditStyle-Methode, um dem PropertyGrid mitzuteilen, welchen Editorstil der Editor verwendet.
Überschreiben Sie die EditValue-Methode für die Behandlung der Benutzeroberfläche, der Verarbeitung von Benutzereingaben und der Zuweisung von Werten.
Sie können in PropertyGrid zusätzliche Unterstützung für die grafische Darstellung eines Werts hinzufügen, indem Sie folgende Aufgaben ausführen:
Überschreiben Sie GetPaintValueSupported, um anzugeben, dass der Editor das Anzeigen der Darstellung des Werts unterstützt.
Überschreiben Sie PaintValue, um die Anzeige der Darstellung des Werts zu implementieren.
Überschreiben Sie die UITypeEditor-Konstruktormethode, wenn der Editor ein Initialisierungsverhalten aufweisen soll.
Tipp
Typ-Editoren für die Benutzeroberfläche werden oft mithilfe von Typen aus dem System.Windows.Forms-Namespace implementiert, dies ist jedoch nicht zwingend erforderlich. Die Standard-Typ-Editoren für die Benutzeroberfläche in .NET Framework werden vom UITypeEditor abgeleitet.
Ableiten von der UITypeEditor-Klasse
Der benutzerdefinierte Typ-Editor für die Benutzeroberfläche muss von der UITypeEditor-Klasse abgeleitet werden. Definieren Sie einen Standardkonstruktor, wenn für den Typ-Editor für die Benutzeroberfläche eine spezielle Initialisierung erforderlich ist.
Überschreiben der GetEditStyle-Methode
Wenn Sie im Designer eine Komponente oder ein Steuerelement auswählen, wird das Eigenschaften-Fenster mit den Eigenschaftswerten der gewählten Komponente bzw. des gewählten Steuerelements aktualisiert. Wenn Sie eine Eigenschaft auswählen, fragt die Entwurfsumgebung die GetEditStyle-Methode ab, um zu bestimmen, wie der Eigenschafteneintrag dargestellt werden soll.
Die Überschreibung gibt einen Wert aus der UITypeEditorEditStyle-Enumeration zurück, um den entsprechenden Stil des Typ-Editors für die Benutzeroberfläche zu übermitteln.
In der folgenden Tabelle ist das den einzelnen UITypeEditorEditStyle-Werten jeweils zugeordnete Verhalten aufgeführt.
Membername |
Verhalten |
---|---|
Stellt keine interaktive Benutzeroberflächenkomponente bereit. Um einen Zeichenfolgeneintrag in einen Eigenschaftswert zu konvertieren, wird ein entsprechender TypeConverter verwendet. |
|
Zeigt eine Schaltfläche mit einem nach unten weisenden Pfeil () im Eigenschafteneintrag an. Die Benutzeroberfläche wird in einem Dropdownfenster gehostet. |
|
Zeigt eine Schaltfläche mit Auslassungszeichen () im Eigenschafteneintrag an. Die Benutzeroberfläche ist ein modales Dialogfeld. |
Überschreiben der EditValue-Methode
Die EditValue-Methode zeigt die Benutzeroberfläche an und legt den Wert der Eigenschaft auf den vom Benutzer gewählten Wert fest.
Dropdowneditoren
Für einen Dropdown-Typ-Editor für die Benutzeroberfläche fragen Sie einen Dienstanbieter für die IWindowsFormsEditorService-Schnittstelle ab. Dieser Dienst stellt Informationen über Position und Größe der Benutzeroberfläche bereit. Die Benutzeroberfläche wird i. d. R. als Control implementiert. Die EditValue-Implementierung erstellt eine Instanz dieses Steuerelements, initialisiert sie mit dem aktuellen Eigenschaftswert und übergibt sie dann zur Ausführung durch die Entwurfsumgebung an die DropDownControl-Methode. Wenn der Benutzer einen neuen Wert für die Eigenschaft ausgewählt hat, schließt die EditValue-Implementierung die Benutzeroberfläche durch Aufruf von CloseDropDown. Der Rückgabewert der EditValue-Implementierung wird zum neuen Eigenschaftswert, der in einem PropertyGrid angezeigt wird.
Modaler Editor
Für einen modalen Typ-Editor für die Benutzeroberfläche fragen Sie einen Dienstanbieter für die IWindowsFormsEditorService-Schnittstelle ab. Dieser Dienst stellt Informationen über die Position des Dialogfelds bereit. Die Benutzeroberfläche wird i. d. R. als von Form abgeleitete Klasse implementiert. Die EditValue-Implementierung erstellt eine Instanz dieses Formulars, initialisiert sie mit dem aktuellen Eigenschaftswert und übergibt sie dann zur Ausführung durch die Entwurfsumgebung an die ShowDialog-Methode. Wenn bei diesem Aufruf OK zurückgegeben wird, rufen Sie den neuen Eigenschaftswert aus dem Formular ab und verwenden ihn als Rückgabewert. Der Rückgabewert der EditValue-Implementierung wird zum neuen Eigenschaftswert, der in einem PropertyGrid angezeigt wird.
ITypeDescriptorContext-Parameter
Die EditValue-Methode erhält einen ITypeDescriptorContext-Parameter, mit dem Kontextinformationen über die Entwurfsumgebung abgefragt werden können. Mit diesem Parameter können Sie auf die folgenden Member zugreifen:
Auf einen PropertyDescriptor, der die Metadaten der Eigenschaft darstellt.
Auf eine Instance-Eigenschaft, die auf die im PropertyGrid ausgewählte Komponente verweist.
Auf den IContainer der Komponente.
Auf die OnComponentChanging-Methode und die OnComponentChanged-Methode, die eine Warnung an die Entwurfsumgebung übermitteln, wenn der Zustand einer Komponente geändert wird.
Bereitstellen einer grafischen Darstellung des Werts der Eigenschaft
Durch das Überschreiben der PaintValue-Methode können Sie eine grafische Darstellung des Werts der Eigenschaft anzeigen. Mithilfe des bereitgestellten PaintValueEventArgs-Parameters können Sie die Darstellung in einem kleinen Rechteck links neben dem Eigenschafteneintrag in einem PropertyGrid zeichnen.
Tipp
Achten Sie darauf, dass die grafische Darstellung innerhalb der durch die Bounds-Eigenschaften des PaintValueEventArgs-Parameters definierten Begrenzungen liegt.
Überschreiben Sie die GetPaintValueSupported-Methode, sodass true zurückgegeben wird, um die Entwurfsumgebung darauf hinzuweisen, dass der Typ-Editor für die Benutzeroberfläche eine benutzerdefinierte Darstellung seines Werts zeichnet.
Siehe auch
Aufgaben
Gewusst wie: Erstellen eines UI-Typ-Editors
Gewusst wie: Erstellen eines Windows Forms-Steuerelements, das Entwurfszeitfeatures nutzt