Редактор 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>();
}
Другие вопросы по тегам