Я использовал редактор 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, чтобы пользователь вводил строковые значения в String Editor.
Я даже ссылался на приведенную ниже ссылку.. но все еще существует проблема: как я могу использовать WinForms PropertyGrid для редактирования списка строк?
Да, вам нужно применить 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>();
}