winform问题中的动态用户控制

时间:2011-08-19 15:06:01

标签: winforms user-controls

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

2 个答案:

答案 0 :(得分:1)

Control.ControlCollection.Remove方法可以解决问题。在用户控件的容器上运行它。

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

var controlList = new List<YourUserControlType>(panel1.Controls.OfType<YourUserControlType>());
controlList.ForEach(c => {
    panel1.Controls.Remove(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);
}

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

答案 1 :(得分:0)

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

删除那些运行时添加控件的一种方法是将它们添加到List中,当你需要删除所有运行时控件时,只需遍历List,为每个Control调用MyForm.Controls.Remove(theControl)在列表中。通过调用List上的Clear()完成。

干杯