Ich kann nicht finden, die Antwort zu diesem überall zu finden. Welche Standard-Editoren/-Converter erstellen das 3.5 Framework PropertyGrid-Steuerelement? Sonst welche Objekttypen kann ich darauf werfen und sie zuverlässig anzeigen und bearbeiten können? Ich habe eine Menge Tutorials über die Verwendung von benutzerdefinierten Editoren gefunden (was ich irgendwann tun kann). Aber jetzt erlaube ich dem Benutzer in meinem Programm, eigene benutzerdefinierte Eigenschaften zu erstellen, und ich möchte wissen, welche Objekttypen ich zulassen sollte, vorausgesetzt, dass sie sie in einem PropertyGrid bearbeiten.Voreingestellte integrierte Editoren für das PropertyGrid-Steuerelement
Antwort
Sie können sich die Klassen ansehen, die von UITypeEditor
(in System.Drawing.Design
namespace) abgeleitet sind. Diese Typen werden als Parameter an die EditorAttribute
(in der System.ComponentModel
namespace) übergeben.
Sie können auch die Metadaten für den Typ anzeigen, um zu sehen, wo die EditorAttribute
angewendet wird. Allerdings nicht verwenden Reflexion hier, wie das ist nicht, was die PropertyGrid
class verwendet.
Verwenden Sie eher die TypeDescriptor
class, um Eigenschaftenbeschreibungen für die Eigenschaften des Typs zu erhalten (rufen Sie die statische GetProperties
method). Rufen Sie dann mit der PropertyDescriptor
Instanz die GetEditor
method, um eine Instanz des Editors für diese Eigenschaft abzurufen.
Sie können tatsächlich jedes Objekt im PropertyGrid werfen. Es wird viele Dinge automatisch erledigen. Sie müssen nur benutzerdefinierte UI-Typ-Editoren erstellen, wenn Sie eine spezielle Bearbeitungserfahrung haben möchten, die nicht nativ bereitgestellt wird. Und selbst in diesem Fall machst du das pro Grundstück und nicht für ein ganzes Objekt.
Das PropertyGrid verwendet TypeConverter und es gibt TypeConverter für jeden primitiven Typ (sowie für Sammlungen primitiver Typen).
Solange Sie einen der primitiven Typen oder eine Sammlung primitiver Typen verwenden, sollte das Eigenschaftenraster in der Lage sein, eine Bearbeitungsoberfläche bereitzustellen.
Neben UITypeEditors kann das PropertyGrid jedes Objekt mit einem TypeConverter anzeigen, das für CanConvertFrom (String) den Wert true zurückgibt. Zu diesem Zweck können Sie eigene TypeConverter für bestimmte Objekttypen implementieren.
Bedenken Sie, dass es einige nicht-öffentliche Klassen gibt.
System.Object
System.Drawing.Design.UITypeEditor
System.ComponentModel.Design.CollectionEditor
System.ComponentModel.Design.ArrayEditor
System.Web.UI.Design.CollectionEditorBase
System.Web.UI.Design.WebControls.WizardStepCollectionEditor
System.Web.UI.Design.WebControls.EmbeddedMailObjectCollectionEditor
System.Web.UI.Design.WebControls.HotSpotCollectionEditor
System.Web.UI.Design.WebControls.ListItemsCollectionEditor
System.Web.UI.Design.WebControls.MenuItemStyleCollectionEditor
System.Web.UI.Design.WebControls.RoleGroupCollectionEditor
System.Web.UI.Design.WebControls.StyleCollectionEditor
System.Web.UI.Design.WebControls.SubMenuStyleCollectionEditor
System.Web.UI.Design.WebControls.TableCellsCollectionEditor
System.Web.UI.Design.WebControls.TableRowsCollectionEditor
System.ComponentModel.Design.BinaryEditor
System.ComponentModel.Design.DateTimeEditor
System.ComponentModel.Design.MultilineStringEditor
System.ComponentModel.Design.ObjectSelectorEditor
System.Windows.Forms.Design.AnchorEditor
System.Windows.Forms.Design.BorderSidesEditor
System.Windows.Forms.Design.DockEditor
System.Windows.Forms.Design.FileNameEditor
System.Windows.Forms.Design.FolderNameEditor
System.Windows.Forms.Design.ShortcutKeysEditor
System.Web.UI.Design.ConnectionStringEditor
System.Web.UI.Design.DataBindingCollectionEditor
System.Web.UI.Design.ExpressionsCollectionEditor
System.Web.UI.Design.UrlEditor
System.Web.UI.Design.XmlFileEditor
System.Web.UI.Design.WebControls.DataGridColumnCollectionEditor
System.Web.UI.Design.WebControls.DataControlFieldTypeEditor
System.Web.UI.Design.WebControls.MenuBindingsEditor
System.Web.UI.Design.WebControls.MenuItemCollectionEditor
System.Web.UI.Design.WebControls.ParameterCollectionEditor
System.Web.UI.Design.WebControls.RegexTypeEditor
System.Web.UI.Design.WebControls.TreeNodeCollectionEditor
System.Web.UI.Design.WebControls.TreeViewBindingsEditor
System.Web.UI.Design.WebControls.DataPagerFieldTypeEditor
System.Messaging.Design.QueuePathEditor
System.Drawing.Design.ImageEditor
System.Drawing.Design.ColorEditor
System.Drawing.Design.ContentAlignmentEditor
System.Drawing.Design.CursorEditor
System.Drawing.Design.FontEditor
System.Drawing.Design.FontNameEditor
System.Drawing.Design.IconEditor
System.Workflow.ComponentModel.Design.TypeBrowserEditor
System.Workflow.ComponentModel.Design.BindUITypeEditor
Aber was sind all die Dinge, die es automatisch tun wird? Im Moment möchte ich nicht mit benutzerdefinierten Editoren umgehen. Ich habe verschiedene Zahlen, string, bool und DateTime ausprobiert und sie alle arbeiten entweder oder haben eingebaute Editoren. Ich hatte gehofft, dass es irgendwo eine Liste aller Typen gibt, die standardmäßig bearbeitet werden können. –
Sie können die Vererbungshierarchie Ihrer Eigenschaftstypen anzeigen, wenn sie einen UITypeEditor als Attribut angehängt haben oder nicht. Standardmäßig benötigt das Eigenschaftenraster entweder einen Editor oder einen Typkonverter, um zu/von string zu gelangen. – grover