visual usar tag studio ejemplos como application c# winforms dispose designer

c# - usar - ¿Cuál es el propósito de los componentes IContainer generados por el diseñador de Winforms?



wpf application (2)

Cuando agrega componentes que no son UI al formulario (como un componente Timer ), los components serán los padres de esos compoments. El código en el archivo del diseñador asegura que estos componentes se eliminan cuando se desecha el formulario. Si no ha agregado ninguno de estos componentes al formulario en tiempo de diseño, los components serán null .

Dado que los components son generados por el diseñador, y serán null si no tiene components que no sean UI en el formulario (en tiempo de diseño), yo personalmente optaría por administrar esos componentes de alguna otra manera, desechándolos de forma cercana o algo así.

Cuando creas un nuevo formulario en Visual Studio, el diseñador genera el siguiente código en el archivo .Designer.cs:

/// <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); }

¿Cuál es el propósito de la variable de components ? Mi teoría es que debería usarlo para cualquier clase IDisposable mi formulario que cree fuera de Designer (ya que Dispose ya está siendo implementado por el Diseñador).

Entonces, por ejemplo, si mi formulario posee una fuente, podría asegurarme de que se elimine agregándolo a components como este:

public partial class Form1 : Form { Font coolFont; public Form1() { InitializeComponent(); this.coolFont = new Font("Comic Sans", 12); components.Add(this.coolFont); } }

¿Es para eso que es? No he podido encontrar ninguna documentación o información sobre esto.


La variable de componentes es el equivalente de la variable de controles del formulario. Lo que hace un seguimiento de todos los controles puestos en un formulario. Para que un formulario pueda disponer automáticamente todos los controles cuando está cerrado, es una tarea de limpieza muy importante.

La clase de formulario no tiene un miembro equivalente que realice un seguimiento de todos los componentes que se colocaron en él en el momento del diseño, por lo que el diseñador se ocupa de él automáticamente.

Tenga en cuenta que mover el método Dispose () del archivo Designer.cs al archivo de código fuente principal del formulario es bastante aceptable. Te recomiendo encarecidamente que lo hagas, no hay razón para hacer que la clase de Formulario sea "especial" de ninguna manera, es solo una clase administrada como cualquier otra. Agregue llamadas Dispose () para eliminar miembros según sea necesario antes de la llamada base.Disponer.