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

有帮助吗?

解决方案

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

您还可以查看该类型的元数据以了解该类型的位置 EditorAttribute 被申请;被应用。然而, 不要 在这里使用反射,因为这不是 PropertyGrid 班级 用途。

而是使用 TypeDescriptor 班级 获取类型属性的属性描述符(调用静态 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中的任何物体。它会自动做很多事情。你只需要创建自定义的UI类型编辑器,如果你想有一个特殊的编辑体验,这本身并不提供。即使在这种情况下,你做的每财产而不是整个对象。

在PropertyGrid中使用类型转换器和存在用于每个原语类型类型转换器(以及原始类型的集合)。

只要您使用的基本类型的一个或原始类型的集合作为属性网格应该能够采取提供编辑UI的照顾。

此外UITypeEditors,PropertyGrid中能够与用于返回CanConvertFrom(字符串)真实的TypeConverter,以显示任何对象。你可以实现你自己的特定对象类型的类型转换器,以实现这一目标。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top