从 WinForm 中删除动态添加的控件

Nab*_*egh 2 .net c# winforms

我有一个 GroupBox,我可以在其中动态添加控件。我添加的控件有两种类型DevExpress.XtraEditors.TextEditWindows.Forms.Label 我正在尝试使用以下方法删除这些控件

foreach (Control control in salesBox.Controls)
{
  control.Dispose(); 
  salesBox.Controls.Remove(control);
} 
Run Code Online (Sandbox Code Playgroud)

这是正确删除TextEdit控件但不是Label控件。循环不遍历Label控件。

Oli*_*bes 5

从控件集合中删除所有控件的最简单方法是调用其Clear方法:

salesBox.Controls.Clear();
Run Code Online (Sandbox Code Playgroud)

修改集合会使枚举器无效并产生不可预测的结果,甚至抛出InvalidOperationException,具体取决于集合类型(请参阅MSDN 上IEnumerable.GetEnumerator 方法中的“备注”部分)。由于foreach使用枚举器,您不应更改它正在迭代的集合。

使用for语句,如果您必须有选择地删除并向后迭代,以便在删除项目后不会得到错误的索引值:

for (int i = salesBox.Controls.Count - 1; i >= 0; i--) {
    Control c = salesBox.Controls[i];
    if (c is TextEdit || c is Label) {
        salesBox.Controls.RemoveAt(i);
    }
}
Run Code Online (Sandbox Code Playgroud)