WHY!这不会处理流程面板上的所有物体!? 计数显示5,表单上有5个buttonsWithProperties,表单上没有其他对象。
foreach (ButtonWithProperties itemButton in flowLayoutPanel1.Controls)
{
itemButton.Dispose();
}
它处理3个对象但不包括最后2个...
答案 0 :(得分:2)
对Dispose()
一个有实时引用的对象(在可视化树中)来说,这确实是一种不好的做法。如果要删除按钮,则可能必须以有序的方式将其从Controls
中删除。请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection.removeat.aspx。
编辑:
请注意,该按钮为IDisposable
,因此RemoveAt
版本需要明确Dispose
:
var controls = flowLayoutPanel1.Controls;
for (int i = controls.Count - 1; i >= 0; --i)
{
var c = controls[i];
if (c is ButtonWithProperties)
{
flowLayoutPanel1.Controls.RemoveAt(i);
c.Dispose();
}
}
编辑:
The documentation表示即使使用Dispose
,也应调用Clear
。因此,如果您不再需要按钮,则应Dispose()
。