2009-04-09 4 views
11

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

4

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.

1

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.

+0

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. –

+0

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

1

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.

1

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.

7

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