当我尝试删除所有动态分配的按钮时,我有一些奇怪的行为。
我给每个按钮命名与“dynamicButton”相同
for (int i = 0; i < 10; i++)
{
foreach (Control item in Controls.OfType<Control>())
{
if (item.Name.Contains("dynamicButton"))
{
Controls.Remove(item);
}
}
}
注意它循环了10次(虽然6或7就足够了)。下面我将向您展示它是如何做到的。
等等直到它们全部消失。
如图所示,我在这个东西里面做了很多不必要的循环,并且由于某种原因,即使我使用相同的参数,它也没有全部用完......
任何人都知道为什么会这样吗?
您在循环时修改集合。一些集合类型(如List<T>
)对此具有内置的“保护”,在下一次迭代中抛出异常,但ControlCollection
显然没有。
假设您在元素#4处并将其删除 - 元素#5将移至#4,导致其被跳过。
你可以扭转循环,即:
for (int i = Controls.Count - 1; i >= 0; i--)
{
Control item = Controls[i];
if (item.Name.Contains("dynamicButton"))
{
Controls.RemoveAt(i);
}
}