我正在使用属性网格编写名称/值对的应用程序。 我的类文件中的一些属性是ListDictionary集合。在那儿 我可以在属性声明中应用的Editor属性 集合编辑器在运行时工作?如果没有,是否可以继承 ComponentModel.Design.CollectionEditor在运行时使用?我需要能够添加, 删除和编辑集合值。 非常感谢, 特里
答案 0 :(得分:3)
有三个要求a 收集应该满足 成功坚持了 CollectionEditor:
- 首先,集合必须实现IList接口 (继承自 System.Collections.CollectionBase是 在大多数情况下,最好的选择)。
其次,它必须具有Indexer(VB.NET中的Item)属性。的类型 这个属性是由 CollectionEditor来确定 默认的实例类型 将添加到该集合。
为了更好地理解其工作原理,请查看GetItemType() 的功能 CustomCollectionEditorForm:
受保护的虚拟类型GetItemType(IList coll) { PropertyInfo pi = coll.GetType()。GetProperty(“Item”, new Type [] {typeof(int)}); 返回pi.PropertyType }
- 醇>
第三,集合类必须实现以下一个或两个 方法:添加和AddRange。虽然 IList接口有一个Add成员和 CollectionBase实现了IList,你 仍然要实现一个Add方法 对于你的收藏,鉴于此 CollectionBase声明了一个显式的 IList的成员实现 添加会员。设计师序列化 根据什么收集 你已经实施的方法。如果你 已经实现了两者,AddRange是 优选的。
在本文中,您将找到在属性网格上实现集合所需的一切
答案 1 :(得分:1)
我认为这篇文章解释了您的需求:How to Edit and Persist Collections with CollectionEditor