Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Need I remove controls after disposing them?

.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

Little explanation

  • Surely, if I Dispose a control I will not see it anymore, but anyway, will remain a "Nothing" in the parent controls collection?
  • need I also, like MSDN recommends, remove all handlers from the control?
like image 276
serhio Avatar asked Jan 06 '10 15:01

serhio


People also ask

How do I remove panel control?

If all of your controls that you want to delete are in a Panel, you can do: panel. Controls. Clear(); That clears all controls form your panel.

When to use Dispose?

The dispose pattern is used for objects that implement the IDisposable interface, and is common when interacting with file and pipe handles, registry handles, wait handles, or pointers to blocks of unmanaged memory. This is because the garbage collector is unable to reclaim unmanaged objects.

How to use Dispose method in c#?

To dispose the object I have implemented the IDisposable interface for the class. The interface provides a method named Dispose. This is the method where we have to write all the code to dispose of the unmanaged object. And we can create the object of the above code as shown in the below code snippet.


1 Answers

No, you don't.
I tried it.

You can paste the following code into LINQPad:

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

EDIT: The control will be removed from the form's Controls collection. To demonstrate this, replace the click handler with the following:

b.Click += delegate { b.Dispose(); MessageBox.Show(form.Controls.Count.ToString());};

It will show 0.

2nd EDIT: Control.Dispose(bool disposing) contains the following code:

                if (parent != null) { 
                    parent.Controls.Remove(this); 
                }
like image 121
SLaks Avatar answered Sep 28 '22 07:09

SLaks