2010-09-30 21 views
6

Tengo un formulario que tiene un miembro que implementa IDisposable pero no IComponent. Necesito eliminarlo cuando el formulario disponga. Lamentablemente, la disposición del formulario ya está implementada en la porción del código generada automáticamente, y no es parcial.¿Desechar un componente cuando un formulario dispone?

¿Cómo puedo eliminar este objeto?

+1

Un poco dudoso llamarlo para ponerlo en el archivo Designer, pero ellos querían dejar el principal limpio. Moverse no es un problema, el diseñador realmente solo está interesado en la región marcada. Puede cambiar la plantilla del elemento para hacerlo permanente, si realmente lo desea. –

Respuesta

3

Anule Form.Dispose(bool) en su forma, y ​​deshágase de su objeto allí.

Para entender cómo funciona esto, puede consultar la página de MSDN en Implementing a Dispose Method. La clase Form sigue este patrón, que le permite anular Dispose(bool) en subclases. (Sólo asegúrese de llamar base.Dispose(disposing) correctamente en su anulación, también.)


Si no se siente cómodo moviéndose esto desde los .designer.cs archivo en el archivo principal .cs, la otra opción es suscríbase a su propio evento FormClosed y elimine sus recursos en ese controlador de eventos. MSDN recomienda este enfoque: desde documentos para FormClosed:

Puede usar este evento para realizar tareas como liberar recursos utilizados por el formulario y guardar información ingresada en el formulario o actualizar su formulario principal.

+1

El Diseñador de formularios ya ha reemplazado a Form.Dispose() por él. Desafortunadamente es un método generado (y, como tal, no debería agregarle código personalizado). –

+1

@Justin: debe moverlo, si usa el diseñador, a su código; funciona, y no se vuelve a crear. –

+0

@Justin: Acabo de agregar otra opción (potencialmente mejor), también;) –

1

Puede mover el método Dispose(bool) reemplazado a su lado de la clase parcial. Por experiencia, no se recrea en la parte de diseñador.

Cuestiones relacionadas