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();
}
在我的应用程序中,我正在动态生成一些控件。在 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();
}