Встроенные редакторы по умолчанию для элемента управления PropertyGrid

Я не могу найти ответ на этот вопрос нигде. Какие Редакторы/преобразователи по умолчанию строятся в 3.5 Framework PropertyGrid control. В противном случае какие типы объектов я могу бросить на него, и он сможет надежно отображать и редактировать? Я нашел много учебников по использованию пользовательских редакторов (что я могу сделать в какой-то момент). Но прямо сейчас в моей программе я разрешаю пользователю создавать свои собственные пользовательские свойства, и я хочу знать, какие типы объектов я должен разрешить, предполагая, что они будут их редактировать в компонент PropertyGrid.

5 ответов


возможно, вы захотите взглянуть на классы, производные от UITypeEditorSystem.Drawing.Design пространство имен). Эти типы будут переданы в качестве параметров в EditorAttributeSystem.ComponentModel пространство имен).

вы также можете посмотреть метаданные для типа, чтобы увидеть, где это. Однако,не использовать отражение здесь, так как это не то, что PropertyGrid класс использует.

лучше использовать TypeDescriptor класс чтобы получить дескрипторы свойств для свойств типа (вызовите static GetProperties метод). Затем с помощью PropertyDescriptor например, вызов GetEditor метод чтобы получить экземпляр редактора для этого свойства.


имейте в виду, что есть некоторые непубличные классы.

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

вы можете фактически бросить любой объект в PropertyGrid. Он многое делает автоматически. Вам нужно только создать пользовательские Редакторы типов пользовательского интерфейса, если вы хотите иметь специальный опыт редактирования, который изначально не предоставляется. И даже в этом случае вы делаете это за собственность, а не за весь объект.


PropertyGrid использует TypeConverters и есть TypeConverters для каждого примитивного типа (а также коллекции примитивных типов).

пока вы используете один из примитивных типов или коллекцию примитивных типов, сетка свойств должна иметь возможность позаботиться о предоставлении пользовательского интерфейса редактирования.


помимо UITypeEditors, PropertyGrid может отображать любой объект с помощью TypeConverter, который возвращает true для CanConvertFrom (String). Вы можете реализовать свой собственный TypeConverters для конкретных типов объектов для того, чтобы достичь этого.