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