我需要在处理后删除控件吗?

ser*_*hio 16 .net c# controls dispose .net-2.0

.NET 2

// dynamic textbox adding
myTextBox = new TextBox();
this.Controls.Add(myTextBox);

// ... some code, finally

// dynamic textbox removing
myTextBox.Dispose();

// this.Controls.Remove(myTextBox); ?? is this needed
Run Code Online (Sandbox Code Playgroud)

小解释

  • 当然,如果我处理一个控件我将不再看到它,但无论如何,在父控件集合中仍将是"Nothing"?
  • 我也需要像MSDN推荐的那样从控件中删除所有处理程序吗?

SLa*_*aks 17

不,你没有.
我尝试过这个.

您可以将以下代码粘贴到LINQPad中:

var form = new Form();
var b = new Button();
form.Controls.Add(b);
b.Click += delegate { b.Dispose(); };
Application.Run(form);
Run Code Online (Sandbox Code Playgroud)

编辑:控件将从表单的Controls集合中删除.为了演示这一点,请使用以下内容替换单击处理程序:

b.Click += delegate { b.Dispose(); MessageBox.Show(form.Controls.Count.ToString());};
Run Code Online (Sandbox Code Playgroud)

它会显示出来0.

2 编辑:Control.Dispose(bool disposing)包含以下代码:

                if (parent != null) { 
                    parent.Controls.Remove(this); 
                }
Run Code Online (Sandbox Code Playgroud)