加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为什么控件不想删除?

发布时间:2020-12-15 20:51:30 所属栏目:百科 来源:网络整理
导读:我试图删除我的winform面板中包含的所有控件,但他们根本不想删除 – 其中一些被删除而其中一些没有.我已经尝试了两种方法,没有: foreach foreach (Control controlEntry in this.contentsPanel.Controls){ this.contentsPanel.Controls.Remove(controlEntry
我试图删除我的winform面板中包含的所有控件,但他们根本不想删除 – 其中一些被删除而其中一些没有.我已经尝试了两种方法,没有:

> foreach

foreach (Control controlEntry in this.contentsPanel.Controls)
{
    this.contentsPanel.Controls.Remove(controlEntry);
}

>为

for (int i = 0; i < this.contentsPanel.Controls.Count; i++)
{
    this.contentsPanel.Controls.RemoveAt(i);
}

为什么会这样?

解决方法

您必须注意这样的代码,从容器中删除控件会产生不可恢复的资源泄漏. Controls.Remove / At()或其他海报建议的Controls.Clear()方法从集合中删除控件并将其重新托管到“停放窗口”.一个不可见的窗口,本机窗口可以找到一个好客的家,而不必被破坏.准备在另一位家长上重新托管.

哪个陷阱,您通常不会将其移动到另一个父级.控件将继续在停放窗口中存活,消耗本机Windows资源.垃圾收集器无法恢复这些资源.最终,当Windows拒绝为您的进程提供更多窗口时,您的程序将崩溃.异常消息将显示“创建句柄时出错”.

相反,您必须处置控件.这也会自动从其父级中删除控件.正确的代码是:

while (contentsPanel.Controls.Count > 0) contentsPanel.Controls[0].Dispose();

如果你发现这有点太奇怪了,或者向后迭代.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读