假设我有一个简单的用户控件,从代码后面添加了一个picturebox:
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方法并在picturebox上调用.dispose()?还是它最终会被自己清理掉?
根据MSDN文档,Control.Dispose
负责所有子控件:
释放控件及其子控件使用的非托管资源,也可以选择释放托管资源。
因此,假设包含UserControl
的表单被处理,那么您的UserControl
及其所有子级也将被处理。
编辑:我应该补充一点,只有当您的UserControl
在处理表单时仍然是表单的子级时,这才是真的。如果您将其从控制层次结构中删除,则您有责任自己处理它。但即便如此,处理掉UserControl
也会处理掉它的所有子代。