问题 PropertyGrid控件的默认内置编辑器


我似乎无法在任何地方找到答案。默认编辑器/转换器构建到3.5 Framework PropertyGrid控件中。否则我可以抛出哪些对象类型,它能够可靠地显示和编辑?我发现了很多关于使用自定义编辑器的教程(我可能会在某些时候这样做)。但是现在我的程序中我允许用户创建自己的自定义属性,我想知道我应该允许哪些对象类型,假设他们将在PropertyGrid中编辑它们。


7303
2018-04-09 19:37


起源



答案:


您可能想要查看派生自的类 UITypeEditor (在里面 System.Drawing.Design 命名空间)。这些类型将作为参数传递给 EditorAttribute (在里面 System.ComponentModel 命名空间)。

您还可以查看类型的元数据以查看其中的位置 EditorAttribute 被申请;被应用。然而, 不要 在这里使用反射,因为那不是什么 PropertyGrid 类 使用。

而是使用 TypeDescriptor 类 获取类型属性的属性描述符(调用静态 GetProperties 方法)。然后,随着 PropertyDescriptor 例如,打电话给 GetEditor 方法 获取该属性的编辑器实例。


4
2018-04-09 19:47





请记住,有一些非公开课。

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

7
2018-02-23 12:25





您实际上可以在PropertyGrid上抛出任何对象。它会自动完成很多事情。如果您希望获得本机提供的特殊编辑体验,则只需创建自定义UI类型编辑器。即使在这种情况下,你按照属性而不是整个对象来做。


1
2018-04-09 19:40



但它会自动完成的所有事情是什么?现在我不想处理自定义编辑器。我尝试了各种数字,字符串,bool和DateTime,它们都可以工作或内置编辑器。我希望在默认情况下可以编辑的所有类型的某个列表中都有一个列表。 - Eric Anastas
如果属性类型的UITypeEditor附加为属性,则可以查看属性类型的继承层次结构。默认情况下,属性网格需要编辑器或类型转换器才能进入/来自字符串。 - grover


答案:


您可能想要查看派生自的类 UITypeEditor (在里面 System.Drawing.Design 命名空间)。这些类型将作为参数传递给 EditorAttribute (在里面 System.ComponentModel 命名空间)。

您还可以查看类型的元数据以查看其中的位置 EditorAttribute 被申请;被应用。然而, 不要 在这里使用反射,因为那不是什么 PropertyGrid 类 使用。

而是使用 TypeDescriptor 类 获取类型属性的属性描述符(调用静态 GetProperties 方法)。然后,随着 PropertyDescriptor 例如,打电话给 GetEditor 方法 获取该属性的编辑器实例。


4
2018-04-09 19:47





请记住,有一些非公开课。

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

7
2018-02-23 12:25





您实际上可以在PropertyGrid上抛出任何对象。它会自动完成很多事情。如果您希望获得本机提供的特殊编辑体验,则只需创建自定义UI类型编辑器。即使在这种情况下,你按照属性而不是整个对象来做。


1
2018-04-09 19:40



但它会自动完成的所有事情是什么?现在我不想处理自定义编辑器。我尝试了各种数字,字符串,bool和DateTime,它们都可以工作或内置编辑器。我希望在默认情况下可以编辑的所有类型的某个列表中都有一个列表。 - Eric Anastas
如果属性类型的UITypeEditor附加为属性,则可以查看属性类型的继承层次结构。默认情况下,属性网格需要编辑器或类型转换器才能进入/来自字符串。 - grover


PropertyGrid使用TypeConverters,并且每种基本类型(以及基本类型的集合)都有TypeConverters。

只要您使用其中一种基本类型或基本类型集合,属性网格就应该能够提供编辑UI。


1
2018-04-09 19:55





除了UITypeEditors之外,PropertyGrid还能够显示任何带有TypeConverter的对象,该对象为CanConvertFrom(String)返回true。您可以为特定对象类型实现自己的TypeConverters,以实现此目的。


1
2017-09-14 15:33