【发布时间】:2011-06-27 12:44:19
【问题描述】:
在 WinForms 设计器中编辑和保留像 decimal[] 或 List<string> 这样的集合的最简单方法是什么?
第一个问题是需要一个无参数的构造函数。所以我做了一个简单的包装类:
(有时这就像MyObject<T>,但 WinForms 设计器代码生成器不知道如何处理它)
[Serializable()]
public class MyObject
{
public MyObject() {}
public decimal Value {get; set;}
}
在容器类中,我们定义一个属性并为其添加 CollectionEditor 属性:
public class MyContainer
{
private List<MyObject> _col = new List<MyObject>();
[Editor(typeof(CollectionEditor), typeof(System.Drawing.Design.UITypeEditor))]
public List<MyObject> Collection
{
get { return _col; }
set { _col = value; }
}
}
现在我根据 stackoverflow 上的答案和 codeproject.com 上的文章尝试了各种事情:
- ArrayEditor 带小数[] 字段
- MyObject 的自定义类型转换器
- List 的自定义集合类
- 容器类的读/写属性
- 带有 EditValue 实现的自定义编辑器
- 为 MyObject 实现 IComponent 接口
- 尝试添加 DesignerSerializationVisibility(DesignerSerializationVisibility.Content)
我确实让它工作了,所以
- 集合在 DesignMode 中可见
- 集合可在设计模式中编辑
- 可以在设计模式中将新项目添加到集合中
但是,通过保存、关闭和重新打开表单,集合中的元素永远不会被持久化。
编辑: Hans 给了我一些提示(他的 cmets 不知何故进入了虚空)。我遵循了他的指导方针并更新了上面的源代码,不幸的是仍然无法正常工作......
【问题讨论】:
标签: c# .net vb.net winforms designmode