¿Se elimina automáticamente un System.Windows.Forms.Form cuando el usuario lo cierra con la parte superior derecha X o Alt + F4? El formulario se muestra con form.Show (this), not form.ShowDialog (...);Es un formulario Disposed cuando el usuario lo cierra desde la barra de ventana/etc
10
A
Respuesta
13
Con Show
, sí lo es (al final de WmClose
). Con ShowDialog
, no, no lo es. ;-P diversión
Para ShowDialog, see MSDN:
Debido a una forma que se muestra como un cuadro de diálogo no está cerrada, se debe llamar al método Dispose del formulario cuando el formulario ya no es necesario para su aplicación .
que lo demuestran, sin embargo:
Form main = new Form();
Form test = new Form();
test.Text = "Close me";
test.Disposed += delegate {
main.Text = "Second form was disposed";
};
main.Shown += delegate {
test.Show();
};
Application.Run(main);
Cuestiones relacionadas
- 1. Cierre de formulario primario cuando el formulario hijo se cierra
- 2. ¿Cómo detectar cuando el formulario de propietario se cierra desde un control interno?
- 3. DialogResult que no cierra el formulario?
- 4. Realizar la acción cuando el usuario cierra la sesión a través de SSH desde un host en particular
- 5. ¿es posible abrir una ventana emergente con javascript y luego detectar cuando el usuario la cierra?
- 6. WPF cierra todas las ventanas cuando el usuario cierra una de ellas
- 7. Accediendo al formulario principal desde el formulario
- 8. La automatización de Excel COM deja de funcionar cuando el usuario cierra la sesión
- 9. ¿Cómo realizo un evento en el control de usuario y lo guardo en el formulario principal?
- 10. ¿Cerrar un formulario desde otro formulario?
- 11. ¿ODP.net cierra un cursor de ref cuando se cierra la conexión?
- 12. Cómo deshabilitar el botón Atrás en el navegador cuando el usuario cierra sesión en asp.net C#
- 13. C# ¿Por qué form.Close() no cierra el formulario?
- 14. Cómo capturar el PID de un proceso cuando lo ejecuta desde la línea de comando?
- 15. ¿Cómo manejar el estado en línea del usuario cuando cierra el navegador?
- 16. Cerrar un formulario desde el controlador de carga
- 17. ¿Cómo deshabilitar la acción de descarga previa cuando el usuario envía un formulario?
- 18. MessageQueue Disposed más de una vez
- 19. Registro de entrada desde el formulario invisible
- 20. ¿Cómo se maneja cuando el usuario cierra el mensaje "Ubicación física" en Firefox y Chrome?
- 21. ¿Por qué SESSION_EXPIRE_AT_BROWSER_CLOSE = True no registra al usuario cuando se cierra el navegador?
- 22. ¿Se cierra automáticamente una SqlConnection cuando se cierra una aplicación?
- 23. Mostrar la barra de búsqueda solo cuando el usuario abre la tabla
- 24. AJAX - Receving la respuesta cuando el usuario cambia páginas
- 25. ¿Cómo detectar datos no guardados en el formulario cuando el usuario abandona la página?
- 26. Mostrar la notificación de barra de estado desde un BroadcastReceiver
- 27. ¿Cómo se envía un formulario con Javascript cuando el nombre de la entrada es "enviar"?
- 28. Cómo ocultar la barra de título desde el principio
- 29. deslizador de formulario jquery (barra de entrada)
- 30. ¿Cómo corregir CodeSign cuando dice que el usuario canceló la operación? (Y no lo hice)
Wow No sabía esto. ¿Puede haber pérdidas de memoria debido a esto? – pdiddy
¿De no deshacerse de los formularios que se muestran con 'ShowDialog'? Bueno, probablemente no una * fuga *, pero podría tomar más tiempo (GC) para limpiar los controladores de ventanas subyacentes. –
Descubrí una fuga solo por no deshacerse de un formulario ShowDialog'ed. .Dispose no se llamó, lo que significaba que los controles en el formulario nunca se eliminaron, lo que significaba que uno de los controles no se anulaba el registro de un controlador SystemEvents. Entonces, el control nunca se eliminó porque estaba suscrito a un evento (y ese evento vivió para el alcance de la aplicación), el control tenía nuevamente una referencia a su Formulario, impidiendo que toda la forma y todo lo que contiene nunca recibiera GC – Anonym