When you create a new form in Visual Studio, the designer generates the following code in the .Designer.cs file:
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
What is the purpose of the components
variable? My theory is that I should use it for any IDisposable
classes my form owns which I create outside of Designer (since Dispose
is already being implemented by the Designer).
So, for example, if my form owns a font, I could make sure it gets disposed by adding it to components
like this:
public partial class Form1 : Form
{
Font coolFont;
public Form1()
{
InitializeComponent();
this.coolFont = new Font("Comic Sans", 12);
components.Add(this.coolFont);
}
}
Is that what it's for? I haven't been able to find any documentation or information about this.
When you add non-UI components to the form (such as a Timer
component), components
will be the parent of those compoments. The code in the designer file makes sure that these components are disposed of when the form is disposed. If you have not added any such components to the form in design time, components
will be null
.
Since components
is designer generated, and will be null
if you have no non-UI compoments on the form (in design time), I would personally opt for managing those components in some other way, disposing them on form close or something like that.