是否有必要在winform控件上调用dispose?

时间:2015-02-13 21:45:20

标签: c# .net winforms

假设我有一个简单的用户控件,后面的代码添加了一个图片框:

public partial class UserControlBase : UserControl
{
    public UserControlBase()
    {
        InitializeComponent();

        this.BackColor = Color.White;
        this.Size = new System.Drawing.Size(1280, 1048);

        // Logo
        PictureBox pbLogo = new PictureBox();
        pbLogo.Name = "pbLogo";
        pbLogo.BackgroundImage = Properties.Resources.Logo;
        pbLogo.Dock = DockStyle.Top;
        pbLogo.Size = new System.Drawing.Size(1280, 162);
        pbLogo.BackgroundImageLayout = ImageLayout.Center;

        this.Controls.Add(pbLogo);

我是否必须覆盖UserControlBase上的dispose方法并在图片框上调用.dispose()?或者它最终会自行清理?

1 个答案:

答案 0 :(得分:3)

根据MSDN documentationControl.Dispose负责所有子控件:

  

释放Control及其子控件使用的非托管资源,并可选择释放托管资源。

因此,假设包含UserControl的表单已被处理,您的UserControl及其所有子项也将被处理。

编辑:我应该补充一点,只有在表单处理时UserControl仍然是表单的子级时才会出现这种情况。如果将其从控件层次结构中删除,则您自己负责处理它。但即便如此,处置UserControl也将处置其所有子女。