Редактор StringCollection не сохраняет введенные пользователем значения
Я реализовал редактор StringCollection в своем пользовательском элементе управления, и ниже приведен код:
[Description("extra free-form attributes on this thing.")]
[Editor(@"System.Windows.Forms.Design.StringCollectionEditor," +
"System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
typeof(System.Drawing.Design.UITypeEditor))]
public System.Collections.Specialized.StringCollection Items
{
get
{
if (items == null)
items = new System.Collections.Specialized.StringCollection();
return this.items;
}
}
public System.Collections.Specialized.StringCollection items;
Это работает нормально, но каждый раз, когда я вношу какое-то значение в коллекцию и снова открываю его.. значения теряются, т.е. он не хранит значения.
Что-то не хватает для хранения значения введенных пользователем строк или мне нужно реализовать пользовательскую StringCollection, чтобы введенные пользователем значения сохранялись в редакторе строк.
Я даже сослался на приведенную ниже ссылку... но все еще существует проблема: как я могу использовать PropertyForg WinForms для редактирования списка строк?
2 ответа
Да, вам нужно применить атрибут DesignerSerializationVisibility к DesignerSerializationVisibility.Content
, Без этого все изменения сложных объектов (кроме примитивов, строк и т. Д.) Будут потеряны.
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Description("extra free-form attributes on this thing.")]
[Editor(@"System.Windows.Forms.Design.StringCollectionEditor," +
"System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
typeof(System.Drawing.Design.UITypeEditor))]
public System.Collections.Specialized.StringCollection Items
{
get
{
if (items == null)
items = new System.Collections.Specialized.StringCollection();
return this.items;
}
}
Вы также можете попробовать создать список в своем конструкторе. Это вместе с редактором коллекции строк и атрибутами DesignerSerializationVisibility работает для меня.
[Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design", "System.Drawing.Design.UITypeEditor, System.Drawing")]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<string> TestList { get; set; }
public ListTest()
{
TestList = new List<string>();
}