La diferencia entre Show y ShowDialog en formulario C#
Hay dos formas de mostrar ventanas en C#: visualización modal (showdialog) y visualización no modal (show).
La diferencia más común entre los dos es:
Después de la visualización modal,
la ventana emergente evita todas las respuestas a mensajes desde la ventana de llamada.
La ventana de llamada solo puede continuar después de que finalice la ventana emergente.
Una vez "cerrada" la ventana modal, puede leer la información en la ventana modal, incluido el estado de retorno de la ventana y los valores de los subcontroles de la ventana.
Después de la visualización no modal,
puede cambiar entre la ventana emergente y la ventana de llamada a voluntad.
Después de llamar al método show en la ventana de llamada, el siguiente código se puede ejecutar inmediatamente.
Una vez cerrada la ventana no modal, se liberan todos los recursos de la ventana, la ventana no existe y no se puede obtener información sobre la ventana.
Cuando un formulario se muestra como un cuadro de diálogo modal, al hacer clic en el botón Cerrar (el botón con una X en la esquina superior derecha del formulario) se oculta el formulario y se establece la propiedad DialogResult en DialogResult.Cancel. A diferencia de los formularios no modal, .NET Framework no llama al método Cerrar cuando el usuario hace clic en el botón Cerrar formulario del cuadro de diálogo o establece el valor de la propiedad DialogResult. Luego, el formulario se puede ocultar y volver a mostrar sin crear una nueva instancia del cuadro de diálogo. Debido a que un formulario que se muestra como un cuadro de diálogo no está cerrado, debe llamar al método Dispose del formulario cuando su aplicación ya no necesite el formulario.
En otras palabras, cuando se cierra la ventana no modal, se llamará al método close y luego se llamará al método dispose para reciclar los recursos de la ventana. No se puede obtener la información de la ventana.
Cuando se cierra la ventana modal, no se llamará al método de cierre ni al método de eliminación. La ventana todavía existe y ocupa recursos, por lo que puede continuar obteniendo información relacionada con la ventana. la ventana ya no está en uso, debe liberar recursos manualmente.
Form2 testDialog = new Form2();
if (testDialog.ShowDialog(this) == DialogResult.OK)
{
this.txtResult.Text = testDialog.TextBox1.Text; // Después de cerrar la ventana, puede continuar accediendo a los valores de subcontrol de la ventana
}
else p>
{
this.txtResult.Text = "Cancelado"
}
// Cerrar la ventana
// Otras operaciones
......
......
testDialog.ShowDialog() // Después de la ventana modal es cerrada, se puede mostrar nuevamente
testDialog.Dispose(); // Cuando la ventana modal ya no se usa, se debe llamar al método dispose para liberar recursos
Form2 test = new Form2();
test.Show(); // Visualización no modal
// Cerrar ventana
// Otras operaciones
......
......
test.Show(); // Excepción, porque la ventana ha sido completamente destruida cuando se realiza la prueba. cerrado, se debe crear una nueva ventana aquí y luego Mostrar
// Modificar de la siguiente manera
test = new Form2() // Crear una nueva ventana y reasignar espacio
; p>test.Show(); //Ventana de visualización