#c# #collections #components #properties
#c# #Коллекции #Компоненты #свойства
Вопрос:
У меня есть компонент C #, который имеет два свойства, Property1 и Property2. Property1 — это простое свойство типа int, а Property2 — это список, где T — пользовательский класс. Свойство 2 имеет видимость Designerserialization.Набор атрибутов содержимого.
Когда свойство 1 установлено во время разработки, компонент должен генерировать заданное количество пользовательских классов. Это работает, но классы не сериализуются в файл Designer.cs. Когда я добавляю пользовательский класс через стандартный редактор коллекции Visual Studio, класс сериализуется в файл Designer.cs.
Как я могу заставить Visual Studio также сериализовать сгенерированные классы в файле Designer.cs?
Вот небольшой пример того, что у меня есть сейчас:
public class TestComponent : Component
{
private int _Count;
public int Count
{
get { return _Count; }
set
{
_Count = value;
Columns.Clear();
for (int i = 0; i < _Count; i )
{
TestClass tClass = new TestClass();
tClass.Description = "TestClass" i.ToString();
Columns.Add(tClass);
}
}
}
private List<TestClass> columns = new List<TestClass>();
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<TestClass> Columns
{
get { return columns; }
}
}
[ToolboxItem(false), DesignTimeVisible(false)]
public class TestClass : Component
{
private string _Description;
public string Description
{
get { return _Description; }
set { _Description = value; }
}
}
Ответ №1:
Свойство Columns не имеет параметра установки. Сериализатор проигнорирует это свойство. Измените на это:
private List<TestClass> columns = new List<TestClass>();
[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<TestClass> Columns
{
get { return columns; }
set { columns = value; }
}
Комментарии:
1. Привет, Ричард, это не решило проблему, но я уже нашел решение. Я обновил свой первоначальный вопрос, чтобы отразить решение.
Ответ №2:
ПРИМЕЧАНИЕ: ответ был предоставлен @urk_forever в тексте его вопроса. Я вернул вопрос в исходное состояние и скопировал изменения здесь как CW
ОБНОВЛЕНИЕ: я уже нашел решение. Мне пришлось добавить эту строку:
это.Контейнер.Добавить(TClass); чтобы заставить дизайнера сериализовать созданные классы. Я обновил приведенный ниже код, чтобы отразить это изменение. Теперь классы сериализуются в Designer.cs.
Код изменен следующим образом в for-loop
[IAbstract]
for (int i = 0; i < _Count; i )
{
TestClass tClass = new TestClass();
tClass.Description = "TestClass" i.ToString();
Columns.Add(tClass);
this.Container.Add(tClass); // <-- added
}