Кажется, я никак не могу найти ответ. Какие стандартные редакторы/преобразователи встроены в элемент управления 3.5 Framework PropertyGrid. В противном случае, какие типы объектов я могу набросить на него, и он сможет надежно показать и отредактировать? Я нашел много учебников по использованию настраиваемых редакторов (что я могу сделать в какой-то момент). Но прямо сейчас в моей программе я разрешаю пользователю создавать свои собственные пользовательские свойства, и я хочу знать, какие типы объектов я должен разрешить предположить, что они будут редактировать их в PropertyGrid.
Встроенные редакторы по умолчанию для элемента управления PropertyGrid
Ответ 1
Вы можете взглянуть на классы, полученные из UITypeEditor
(в System.Drawing.Design
namespace). Эти типы будут переданы в качестве параметров EditorAttribute
(в System.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 для определенных типов объектов, чтобы выполнить это.