2009-04-11 10 views
7

Cuando el usuario hace clic en cierta parte de una ventana, agrego un UserControl a los controles de la ventana. El UserControl tiene un botón de cerrar. ¿Qué puedo hacer en el controlador de botones UserControl para destruir el UserControl? Parece que no hay un análogo de .net para la llamada Win32 DestroyWindow, y no hay un método Close() para un control. Hasta ahora tengo esto:¿Cómo puede un UserControl destruirse a sí mismo?

private void sbClose_Click(object sender, EventArgs e) 
{ 
    Parent.Controls.Remove(this); 
    this.Dispose(); 
} 

Y, en caso de que el padre necesite destruir el control, ¿cuáles son los pasos? Esto es lo que tengo hasta ahora:

Controls.Remove(control); 
    control.Dispose(); 

Respuesta

6

Estás trabajando en un entorno de código administrado con la recolección de basura - no hay nada que puede hacer para fuerza el control de usuario que ser destruido.

Todo lo que necesita hacer, todo lo que puede hacer es eliminarlo del elemento principal y asegurarse de que no haya referencias restantes.

Este será generalmente suficiente:

private void sbClose_Click(object sender, EventArgs e) 
{ 
    Parent.Controls.Remove(this); 
} 

La única vez que necesitará más si es atar las cosas junto con los acontecimientos, ya que tendrá que dar de baja esos también.

+0

No solo control/relacionado relacionado. ¿Objetos destruyéndose? ¡divertido! –

0

Un control no se puede destruir a sí mismo. En términos de tener un padre hacerlo, estás en el camino correcto. Puede hacer que el padre u otra llamada de control la elimine y elimine todas las referencias a este control. Desreferenciando el control de esta manera permitirá que el GC limpie las cosas.

Cuestiones relacionadas