Winforms winform问题中的动态用户控件

Winforms winform问题中的动态用户控件,winforms,user-controls,Winforms,User Controls,我有一个在运行时添加到面板的用户控件。有一个“添加”按钮,用于将相同的用户控件添加到面板中。我的问题是,在保存表单或清除表单时,清除用户控件(正确处理它们)的最佳方法是什么?我想删除从“添加”按钮添加的所有其他用户控件,并清除第一个 这个方法就可以了。在用户控件的容器上运行此操作 例如,如果用户控件的类型是YourUserControlType,并且要从中删除用户控件的所有实例的容器是名为panel1的面板,则此代码应起作用: var controlList = new List<Your

我有一个在运行时添加到面板的用户控件。有一个“添加”按钮,用于将相同的用户控件添加到面板中。我的问题是,在保存表单或清除表单时,清除用户控件(正确处理它们)的最佳方法是什么?我想删除从“添加”按钮添加的所有其他用户控件,并清除第一个

这个方法就可以了。在用户控件的容器上运行此操作

例如,如果用户控件的类型是
YourUserControlType
,并且要从中删除用户控件的所有实例的容器是名为
panel1
的面板,则此代码应起作用:

var controlList = new List<YourUserControlType>(panel1.Controls.OfType<YourUserControlType>());
controlList.ForEach(c => {
    panel1.Controls.Remove(c);
});
var controlList=新列表(panel1.Controls.OfType());
controlList.ForEach(c=>{
面板1.控制装置。拆除(c);
});
编辑:适用于.NET 2.0+

List<YourUserControlType> controlList = new List<YourUserControlType>();
for (int i = 0; i < panel1.Controls.Count; i++) {
    YourUserControlType uc = panel1.Controls[i] as YourUserControlType;
    if (uc != null) {
        controlList.Add(uc);
    }
}

foreach (YourUserControlType uc in controlList) {
    panel1.Controls.Remove(uc);
}
List controlList=new List();
对于(int i=0;i

请注意,在这两个版本中,我们都避免在遍历控件集合时从控件集合中删除控件。除非您小心,否则在迭代过程中从集合中删除项可能会导致问题。

由于您没有给出很多关于如何在运行时添加这些控件的具体细节,我假设您实例化了它们(使用new),然后将它们添加到窗体的控件集合中

删除这些运行时添加的控件的一种方法是将它们也添加到列表中,当需要删除所有运行时控件时,只需在列表上迭代,为列表中的每个控件调用MyForm.controls.Remove(控件)。通过调用列表上的Clear()完成


干杯

请输入代码或具体示例..我只是想要一个“最佳实践”。但这两种方法都能奏效。谢谢。我的目标框架是2.0。类似的东西在2.0中会起作用吗?谢谢,谢谢。执行此操作。panel1.Controls.Clear();做同样的事情?@user766595
this.panel1.Controls.Clear()将删除集合中的所有控件。