2009-04-09 56 views
11

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

回答

4

你可能想看看是派生从UITypeEditor(在System.Drawing.Design namespace)班。这些类型将作为参数传递给EditorAttribute(在System.ComponentModel namespace中)。

您也可以看看元数据,看看应用EditorAttribute类型。但是,不要在这里使用反射,因为这不是什么PropertyGrid class使用。

而是使用TypeDescriptor class来获取类型属性的属性描述符(称为静态GetProperties method)。然后,使用PropertyDescriptor实例,调用GetEditor method以获取该属性的编辑器实例。

1

实际上,你可以在PropertyGrid中抛出任何对象。它会自动完成很多事情。如果你想有一个特殊的编辑体验,那么你只需要创建自定义的UI类型编辑器。即使在这种情况下,你也是按照属性来做,而不是为了整个对象。

+0

但是它会自动执行的所有事情是什么?现在我不想处理自定义编辑。我已经尝试了各种数字,字符串,布尔和日期时间,他们都工作或编译器内置。我希望有一个列表可以默认编辑的所有类型的列表。 – 2009-04-09 19:45:22

1

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

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

1

此外UITypeEditors,PropertyGrid中能够与用于CanConvertFrom(字符串)返回true的TypeConverter,以显示任何对象。您可以为特定的对象类型实现自己的TypeConverters,以完成此操作。

7

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

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