我在VS 2013中以编程方式创建了一些用户控件。这些控件有时需要删除并重新创建。我尝试过两种不同的方式删除控件。一个工作,一个不工作。我希望有人可以提供有关为什么不起作用的见解。
此版本不起作用(它只找到四个控件中的两个):
// delete user controls from the front panel
foreach (UserControl ctrl in this.Controls.OfType<StationControl>())
{
this.Controls.Remove(ctrl);
}
此版本确实有效(它找到四个控件中的四个):
// delete user controls from the front panel
var uc_list = this.Controls.OfType<StationControl>().ToArray();
foreach (var ctrl in uc_list)
{
this.Controls.Remove(ctrl);
}
我可以计算与该类型匹配的用户控件的数量(例如
)int controlCount = this.Controls.OfType<StationControl>().Count()
那么为什么第一个foreach声明不能完全发挥作用呢?
答案 0 :(得分:0)
这会有用吗?
foreach (UserControl ctrl in this.Controls.OfType<StationControl>())
{
ctrl.Dispose();
this.Controls.Remove(ctrl);
}
我希望这会有所帮助。
修改强>
以上不会正常工作,这是一种工作方法:
while (this.Controls.OfType<StationControl>().Count() > 0)
{
UserControl ctrl = this.Controls.OfType<StationControl>().First();
ctrl.Dispose();
this.Controls.Remove(ctrl);
}