Winforms在点击时删除控件

本文关键字:删除 控件 Winforms | 更新日期: 2023-09-27 17:54:49

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

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

Winforms在点击时删除控件

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

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

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

private void radMenuItem3_Click(object sender, EventArgs e)
{
    while (rpvRecord.Controls.Count > 0)
    {
        ctrl = rpvRecord.Controls[0];
        rpvRecord.Controls.Remove(ctrl);
        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();
    }
}