【问题标题】:Default built-in editors for the PropertyGrid controlPropertyGrid 控件的默认内置编辑器
【发布时间】:2009-04-09 19:37:27
【问题描述】:

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

【问题讨论】:

    标签: c# editor propertygrid


    【解决方案1】:

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

    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
    

    【讨论】:

      【解决方案2】:

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

      您还可以查看该类型的元数据以了解 EditorAttribute 的应用位置。但是,不要在此处使用反射,因为 PropertyGrid class 不使用反射。

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

      【讨论】:

        【解决方案3】:

        您实际上可以在 PropertyGrid 中抛出任何对象。它会自动做很多事情。如果您想拥有特殊的编辑体验,您只需要创建自定义 UI 类型编辑器,这不是本机提供的。即使在这种情况下,您也可以针对每个属性而不是针对整个对象执行此操作。

        【讨论】:

        • 但是它会自动做些什么呢?现在我不想处理自定义编辑器。我尝试了各种数字、字符串、布尔值和日期时间,它们要么都可以工作,要么都内置了编辑器。我希望在某个地方有一个可以默认编辑的所有类型的列表。
        • 你可以查看你的属性类型的继承层次结构,如果它们有一个 UITypeEditor 作为属性附加或没有。默认情况下,属性网格需要编辑器或类型转换器来获取/获取字符串。
        【解决方案4】:

        PropertyGrid 使用 TypeConverters,每个原始类型(以及原始类型的集合)都有 TypeConverters。

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

        【讨论】:

          【解决方案5】:

          除了 UITypeEditors,PropertyGrid 能够显示任何具有 TypeConverter 的对象,该类型转换器为 CanConvertFrom(String) 返回 true。您可以为特定对象类型实现自己的 TypeConverters 来完成此操作。

          【讨论】:

            猜你喜欢
            • 2011-07-09
            • 1970-01-01
            • 1970-01-01
            • 2021-07-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多