gpt4 book ai didi

c# - 在 DesignMode 中编辑集合的最简单方法?

转载 作者:行者123 更新时间:2023-11-30 14:39:25 24 4
gpt4 key购买 nike

编辑和保留decimal[] 这样的集合的最简单方法是什么?或 List<string>在 WinForms 设计器中?

第一个问题是需要一个无参数的构造函数。所以我做了一个简单的包装类:(在某些时候这就像 MyObject<T> ,但 WinForms designercode 生成器不知道如何处理它)

[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 上的文章尝试了各种方法:

  • 带 decimal[] 字段的 ArrayEditor
  • MyObject 的自定义类型转换器
  • List 的自定义集合类
  • 容器类的读/写属性
  • 实现了 EditValue 的自定义编辑器
  • 为 MyObject 实现 IComponent 接口(interface)
  • 尝试添加 DesignerSerializationVisibility(DesignerSerializationVisibility.Content)

我确实让它工作了

  • 集合在设计模式下可见
  • 集合可在设计模式中编辑
  • 可以在设计模式中将新项目添加到集合中

但是,通过保存、关闭和重新打开表单,集合中的元素永远不会保留。

编辑:汉斯给了我一些提示(他的评论不知何故变成了空白)。我遵循了他的指导方针并更新了上面的源代码,不幸的是,这仍然不起作用......

最佳答案

我建议,如果可能,您公开一个与框架中已使用的属性类型相同的集合属性,这样您就可以重用现有的集合编辑器。例如,如果您使用 StringCollection 类,那么您可以执行以下操作并重用 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; }
}

关于c# - 在 DesignMode 中编辑集合的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6493021/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com