Какой самый простой способ отредактировать и сохранить коллекцию наподобие decimal[]
или List<string>
в конструкторе WinForms?
Первая проблема заключается в том, что нужен конструктор без параметров. Итак, я сделал простой класс-оболочку:
(в какой-то момент это было похоже на MyObject<T>
, но генератор дизайнерского кода WinForms не знал, как с этим справиться)
[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:
- ArrayEditor с десятичным полем []
- Пользовательский TypeConverter для MyObject
- Класс Custom Collection для Списка
- Чтение / запись свойства класса контейнера
- Пользовательский редактор с реализацией для EditValue
- Реализация интерфейса IComponent для MyObject
- Попытка добавления DesignerSerializationVisibility (DesignerSerializationVisibility.Content)
Я заставил его работать так, чтобы
- Коллекция видна в DesignMode
- Коллекция редактируется в DesignMode
- Новые элементы могут быть добавлены в коллекцию в DesignMode
Однако при сохранении, закрытии и повторном открытии формы элементы в коллекции никогда не сохраняются.
Edit:
Ганс дал мне несколько советов (его комментарии как-то ушли в пустоту). Я следовал его указаниям и обновил приведенный выше источник, который, к сожалению, все еще не работает ...