如何将列表项设置为空 C#

本文关键字:设置 列表 | 更新日期: 2023-09-27 18:33:20

我有一个名为容器的用户控件,我在运行时在其中添加其他用户控件。

我想从容器中删除所有控件,我正在做container.Controls.Clear()但我的控件仍在内存中,如何使它们为空?

如何将列表项设置为空 C#

调用 Clear 方法不会从内存中删除控制句柄。必须显式调用 Dispose 方法以避免内存泄漏。

阅读更多:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection.clear.aspx

假设面板是包含所有子控件的父控件,因此循环遍历所有子控件并调用每个子控件的dispose方法...这可能会解决您的问题

  while (panel.Controls.Count > 0)
  {
     panel.Controls[0].Dispose();
  } 

调用 clear 方法只是从容器控件中删除控件而不是从内存中删除控件,因此您需要释放它们......

在父容器上调用 Dispose() 也将释放其所有子控件,前提是它们也实现了 IDisposable 。 一般来说,所有 WinForms 控件都将实现 IDisposable,因此这应该可以工作。

如果没有(与 WPF 一样,因为 WPF 控件不会隐式使用非托管代码),则需要向控件添加一些自定义清理方法。 内存泄漏的最常见来源之一是未分离的事件处理程序。 我通常会做如下事情:

public void CleanUp()
{
    //detach event handlers
    //other cleanup as necessary
}

如果将此设置为虚拟并将其添加到用户控件将继承的基类中,则此功能特别有用,因此只需调用CleanUp()而无需检查类型。 我个人喜欢这种方法,而不是实现 IDisposable,因为 IDisposable 主要用于清理非托管资源。