jay*_*t55 1 c# foreach dispose winforms
我有一个Panel控件.在面板内部,用户可以添加组合框,文本框的标签等并拖动它们,并且我的表单上有一个删除按钮,如果他们点击它,它将删除该面板内的所有控件.但是这段代码:
foreach( Control control in panel.Controls )
{
control.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
... 不能正常工作.它并不总是处理面板内的所有控件.有时它会消除掉它们中的大多数,有时它只能摆脱一两个.有时除了1以外都是处理.WTF?
编辑:
button1_Click(object sender, EventArgs e)
{
TextBox tbox = new TextBox();
tbox.Multiline = true;
tbox.IsAccessible = true;
panel.Controls.Add(tbox);
}
Run Code Online (Sandbox Code Playgroud)
Dispose() 只清理非托管资源(虽然保罗威廉姆斯在评论中指出它通常比这更复杂!)因此它可能会或可能不会对你的情况做任何有用的事情.
尝试使用该RemoveAt(i)方法删除控件,而不是Dispose():
for(int i = panel.Controls.Count-1; i >= 0; i--)
{
panel.Controls.RemoveAt(i);
}
Run Code Online (Sandbox Code Playgroud)
删除所有控件的简单方法是执行以下操作:
panel.Controls.Clear();
Run Code Online (Sandbox Code Playgroud)
编辑:感谢Pieter和Paolo,只是调用Clear()这样会泄漏内存,因为没有处理控件,所以这不是一个好习惯.
| 归档时间: |
|
| 查看次数: |
2794 次 |
| 最近记录: |