最简单的编辑方法是什么persist像这样的集合decimal[]
or List<string>
在 WinForms 设计器中?
第一个问题是需要一个无参数构造函数。所以我做了一个简单的包装类:
(在某些时候这就像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; }
}
}
现在,我根据堆栈溢出的答案和 codeproject.com 上的文章尝试了各种方法:
- 带有小数[]字段的ArrayEditor
- MyObject 的自定义类型转换器
- 列表的自定义集合类
- 容器类的读/写属性
- 带有 EditValue 实现的自定义编辑器
- 为 MyObject 实现 IComponent 接口
- 尝试添加 DesignerSerializationVisibility(DesignerSerializationVisibility.Content)
我确实让它工作了,这样
- 该集合在设计模式中可见
- 该集合可在设计模式中编辑
- 可以将新项目添加到设计模式中的集合中
但是,通过保存、关闭和重新打开表单,集合中的元素永远不会保留。
Edit:汉斯给了我一些提示(他的评论不知何故变成了空白)。我遵循了他的指导方针并更新了上面的源代码,不幸的是仍然不起作用......
我建议,如果可能的话,您公开一个与框架中已使用的类型相同的集合属性,这样您就可以重用现有的集合编辑器。例如,如果您使用字符串集合类,那么您可以执行以下操作并重用 WinForms 现有编辑器...
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor("System.Windows.Forms.Design.StringCollectionEditor,
System.Design, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
public StringCollection Items
{
get { return _myStringCollection; }
}
或者,如果您可以公开string[]然后这样做...
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor("System.Windows.Forms.Design.StringArrayEditor,
System.Design, Version=2.0.0.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
public string[] Lines
{
get { return _myStringArray; }
set { myStringArray = value; }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)