Встроенные редакторы по умолчанию для элемента управления PropertyGrid - PullRequest
11 голосов
/ 09 апреля 2009

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

Ответы [ 5 ]

7 голосов
/ 23 февраля 2010

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

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
4 голосов
/ 09 апреля 2009

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

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

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

1 голос
/ 14 сентября 2009

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

1 голос
/ 09 апреля 2009

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

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

1 голос
/ 09 апреля 2009

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

...