.net 如何保存在设计时为复杂特性输入的值?

.net 如何保存在设计时为复杂特性输入的值?,.net,properties,typeconverter,uitypeeditor,.net,Properties,Typeconverter,Uitypeeditor,当涉及到在设计时为复杂属性实现自定义编辑器时,我仍在学习诀窍 作为一个简单的起点,我尝试对类型为ICollection的属性启用设计时编辑 到目前为止,我所做的是: 编写了一个StringsEditor类,该类派生自UITypeEditor,并显示一个下拉列表,开发人员可以在其中的单独行上输入一组字符串,这些字符串随后添加到集合中。这个很好用 编写了一个StringsConverter类,该类派生自TypeConverter,并在string类型的对象和ICollection类型的对象之间进行

当涉及到在设计时为复杂属性实现自定义编辑器时,我仍在学习诀窍

作为一个简单的起点,我尝试对类型为
ICollection
的属性启用设计时编辑

到目前为止,我所做的是:

  • 编写了一个
    StringsEditor
    类,该类派生自
    UITypeEditor
    ,并显示一个下拉列表,开发人员可以在其中的单独行上输入一组字符串,这些字符串随后添加到集合中。这个很好用
  • 编写了一个
    StringsConverter
    类,该类派生自
    TypeConverter
    ,并在
    string
    类型的对象和
    ICollection
    类型的对象之间进行转换(当然,实现
    ICollection
    的任何类型
    T
    ),这样当开发人员关闭
    StringsEditor
    显示的下拉菜单时,框中显示的文本是以逗号分隔的输入字符串列表。重新打开下拉列表将再次显示字符串,每行显示一个字符串
到目前为止,我的工作的结果是,在设计阶段,一切看起来都很好。用户可以修改属性,在他/她的心脏内容中添加和删除字符串,并且属性网格中显示的文本与集合中的文本匹配

我还没有弄清楚的是——这并不让我感到惊讶——如何在设计时间之外保存这个集合,以便输入的值。。。你知道,呆在那里。我的理解是,目前,属性正在设计时(由我)进行编辑,但由于我正在应用的任何更改都不会对控件生成的
InitializeComponent
方法产生任何影响,因此对我正在设计的类没有任何影响(只有我的IDE当前显示的实例)


但显然,可以将您的值放入
InitializeComponent
调用中。事实上,我只是碰巧发现,对于
DirectoryInfo
类型的属性,使用适当的
UITypeEditor
(我制作了另一个名为
DirectoryEditor
的编辑器,它只显示一个
folderbrowser对话框
,并为选择的任何路径提供一个
DirectoryInfo
对象,这令人惊讶地最终更新了类的
InitializeComponent
方法)。所以我知道这是可以做到的。我只是想找个人给我指出正确的方向。

您是否用[DesignerSerializationVisibility(DesignerSerializationVisibility.content)]标记了将集合公开为内容属性的属性属性?我认为集合需要用此标记才能序列化。您是否用[DesignerSerializationVisibility(DesignerSerializationVisibility.content)]属性将公开集合的属性标记为内容属性?我认为集合需要用此标记才能序列化。