在此之后" foreach"完成后,还有按钮进入panelGroups.Controls
foreach (Button button in panelGroups.Controls)
{
panelGroups.Controls.Remove(button);
}
Visual Studio中的调试模式:
答案 0 :(得分:1)
您展示的代码非常容易出错:
如果Control
中的panelGroups.Controls
不是Button
且未从Button
继承,则您的代码会抛出InvalidCastException
。这是因为您尝试将该面板中的每个Control
投放到Button
,例如对于Label
您尝试更改枚举(通过调用Remove
),而正在迭代它。这会导致InvalidOperationException
。
你最好这样试试:
foreach(Button button in panelGroups.Controls.OfType<Button>().ToList())
panelGroups.Controls.Remove(button);
使用OfType<Button>()
,您只需从面板中选择真正 Button
的控件。
通过调用ToList()
,您可以完成该迭代,以便在开始迭代生成的Controls
集之前从Button
中选择按钮。
通过这种方式,您可以避免异常,并且您的代码可以正常工作。
注意但是这仅适用于Button
中直接包含的panelGroups
。如果该面板中包含更多按钮的其他容器(如面板或组框),则不会以这种方式枚举这些按钮。您必须通过容器向下递减并从容器中取出这些按钮。 Controls
集合。