Вы хотите список Parameter
объектов в пользовательском элементе управления. Это делается просто путем предоставления свойства List<Parameter>
для элемента управления. Вот пример использования формы пользователя:
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
ParameterList = new List<Parameter>();
}
[Category("Custom")]
[Description("A list of custom parameters.")]
public List<Parameter> ParameterList { get; }
}
Ваша главная проблема заключается в том, что элементы, добавляемые в список при разработке формы, не сохраняются при запуске приложения. Этого следует ожидать, так как дизайнер не сохраняет полное состояние дизайна элементов управления в форме. Он в основном сохраняет местоположение, имена и стили, но не содержимое.
Вам нужно будет заполнить список при загрузке формы, либо из файла, базы данных или программно. Это должно быть сделано в методе OnLoad()
:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
ParameterList.Add(new Parameter() { Name="First", Caption="The first parameter" });
}
для чего-то подобного я предпочитаю сериализацию в XML-файл, который загружается автоматически при загрузке формы и автоматически сохраняет при закрытии формы. Но это тема для обсуждения другого вопроса.
Вы можете улучшить визуальные эффекты, создав собственный класс списка для использования вместо List<Parameter>
.
[TypeConverter(typeof(ExpandableObjectConverter))]
public class CustomParameterList : System.Collections.ObjectModel.Collection<Parameter>
{
public override string ToString() => $"List With {Count} Items.";
public void Add(string name, string caption) => Add(new Parameter() { Name = name, Caption = caption });
}
и вы управляете классом
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
ParameterList = new CustomParameterList();
}
[Category("Custom")]
[Description("A list of custom parameters.")]
public CustomParameterList ParameterList { get; }
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
ParameterList.Add("First", "The first parameter");
}
}
, который создает следующее: