您需要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");
}
}
这将创建以下内容: