从表单C#中删除控件

时间:2016-07-29 20:42:26

标签: c# visual-studio-2013 controls

我在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声明不能完全发挥作用呢?

1 个答案:

答案 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);
}