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

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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