运行时的集合编辑器

发布于 2024-07-06 19:04:09 字数 205 浏览 10 评论 0原文

我正在开发一个使用属性网格编辑名称/值对的应用程序。 我的类文件中的一些属性是 ListDictionary 集合。 有没有 我可以在属性声明中应用一个编辑器属性,该属性将使 集合编辑器在运行时工作? 如果没有的话是否可以继承 ComponentModel.Design.CollectionEditor 在运行时使用? 我需要能够添加, 删除和编辑集合值。 多谢, 特里

I'm working on an application to edit name/value pairs using a property grid.
Some of the properties in my class file are ListDictionary collections. Is there
an Editor attribute that I can apply at the property declaration that will make the
Collection Editor work at runtime? If not, is it possible to inherit from
ComponentModel.Design.CollectionEditor for use at runtime? I need to be able to add,
delete and edit the collection values.
Thanks alot,
Terry

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凉月流沐 2024-07-13 19:04:09

来自 codeproject 文章 [http://www.codeproject.com/KB/ cs/dzcollectioneditor.aspx][1]

满足三个要求
集合应满足以便
成功地坚持了
集合编辑器:

  1. 首先,集合必须实现IList接口
    (继承自
    System.Collections.CollectionBase 是
    在大多数情况下这是最好的选择)。
  2. 其次,它必须具有 Indexer(VB.NET 中的 Item)属性。 的类型
    该属性由
    CollectionEditor 确定
    实例的默认类型
    将添加到集合中。

    为了更好地理解其工作原理,请查看 GetItemType()
    的功能
    自定义集合编辑器表单:

    受保护的虚拟类型 GetItemType(IList coll)
    {
    PropertyInfo pi= coll.GetType().GetProperty("项目",
    新类型[]{typeof(int)});
    返回 pi.PropertyType
    }

  3. 第三,集合类必须实现以下一项或两项
    方法:Add 和 AddRange。 虽然
    IList 接口有一个 Add 成员和
    CollectionBase实现了IList,你
    仍然需要实现一个 Add 方法
    考虑到你的收藏
    CollectionBase 声明了一个显式的
    IList 的成员实现
    添加会员。 设计师将其系列化
    根据什么收集
    您已实施的方法。 如果你
    都实现了,AddRange 是
    首选。

在本文中,您将找到在属性网格上实现集合所需的一切

from codeproject article [http://www.codeproject.com/KB/cs/dzcollectioneditor.aspx][1]

There are three requirements that a
collection should meet in order to be
successfully persisted with the
CollectionEditor:

  1. First, the collection must implement the IList interface
    (inheriting from
    System.Collections.CollectionBase is
    in most of the cases the best option).
  2. Second, it must have an Indexer (Item in VB.NET) property. The type of
    this property is used by the
    CollectionEditor to determine the
    default type of the instances that
    will add to the collection.

    To better understand how this works, take a look at GetItemType()
    function of the
    CustomCollectionEditorForm:

    protected virtual Type GetItemType(IList coll)
    {
    PropertyInfo pi= coll.GetType().GetProperty("Item",
    new Type[]{typeof(int)});
    return pi.PropertyType
    }

  3. Third, the collection class must implement one or both of the following
    methods: Add and AddRange. Although
    IList interface has an Add member and
    CollectionBase implements IList, you
    still have to implement an Add method
    for your collection, given that
    CollectionBase declares an explicit
    member implementation of the IList’s
    Add member. The designer serializes
    the collection according to what
    method you have implemented. If you
    have implemented both, the AddRange is
    preferred.

In this article you'll find everything you need to implement your collection on the property grid

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文