Winforms 在点击时删除控件

Winforms remove controls on click

在我的应用程序中,我正在动态生成一些控件。在 telerik 菜单控件上,当我单击时,我想删除这些控件并添加新控件。我正在使用以下代码。它正在删除控件,但每次单击只删除一个控件。为什么这段代码没有一次删除所有控件?

private void radMenuItem3_Click(object sender, EventArgs e)
{
    foreach (Control ctrl in rpvRecord.Controls)
    {
        ctrl.Dispose();
    }
}

可能需要从集合中删除该项目,并且,您可能会在通过循环执行 foreach 时更改集合计数。您可能希望使用 i-- 从 rpvRecord.Controls.Count - 1 到 0 进行迭代,如下所示:

private void radMenuItem3_Click(object sender, EventArgs e)
{
    for (var i = rpvRecord.Controls -1; i >= 0; i --)
    {
        ctrl = rpvRecord.Controls[i];
        rpvRecord.Controls.Remove(cntrl);
        ctrl.Dispose();
    }
}

问题是您正在从循环访问的集合中删除控件,这会导致集合发生变化并导致循环失败。我建议使用不同风格的循环来实现这一点。例如:

private void radMenuItem3_Click(object sender, EventArgs e)
{
    while (rpvRecord.Controls.Count > 0)
    {
        ctrl = rpvRecord.Controls[0];
        rpvRecord.Controls.Remove(ctrl);
        ctrl.Dispose();
    }
}

希望对您有所帮助!

如果你想一次删除所有控件,你可以使用Clear()方法

private void radMenuItem3_Click(object sender, EventArgs e)
{
   rvpRecord.Controls.Clear();
}