Buscar..


Introducción

Este tema explica cómo funciona el motor de WinForms para mostrar formularios y cómo controla sus tiempos de vida.

Muestra una forma modelo o modal.

Después de definir la estructura de su formulario con el diseñador de WinForms, puede mostrar sus formularios en código con dos métodos diferentes.

  • Método - Una forma Modera

     Form1 aForm1Instance = new Form1(); 
     aForm1Instance.Show();
    
  • Método - Un diálogo modal

     Form2 aForm2Instance = new Form2(); 
     aForm2Instance.ShowDialog();
    

Los dos métodos tienen una distinción muy importante. El primer método (el modelo) muestra su formulario y luego regresa inmediatamente sin esperar el cierre del formulario recién abierto. Entonces tu código continúa con lo que sigue a la llamada Show. En su lugar, el segundo método (el modal) abre el formulario y bloquea cualquier actividad en toda la aplicación hasta que cierre el formulario con el botón de cerrar o con algunos botones configurados adecuadamente para cerrar el formulario.

Cerrar una forma de modelo.

Normalmente se emplea un formulario sin modelo cuando necesita mostrar algo de forma permanente a lo largo de la pantalla principal de la aplicación (piense en una leyenda o una vista en un flujo de datos provenientes de un dispositivo o una ventana secundaria de MDI).
Pero una forma sin modelo plantea un desafío único cuando se quiere cerrar. ¿Cómo recuperar la instancia y llamar al método Close en esa instancia?

Puede mantener una variable global que haga referencia a la instancia que desea cerrar.

theGlobalInstance.Close();
theGlobalInstance.Dispose();
theGlobalInstance = null;

Pero también podemos optar por utilizar la colección Application.OpenForms donde el motor de formulario almacena todas las instancias de formulario creadas y aún abiertas.

Puede recuperar esa instancia en particular de esta colección y llamar al método Close

Form2 toClose = Application.OpenForms.OfType<Form2>().FirstOrDefault();
if(toClose != null)
{
    toClose.Close();
    toClose.Dispose();
}

Cierre de un formulario modal.

Cuando se muestra un formulario utilizando el método ShowDialog , es necesario configurar la propiedad DialogResult del formulario para que se cierre. Esta propiedad se puede establecer utilizando la enumeración que también se llama DialogResult .

Para cerrar un formulario, solo necesita establecer la propiedad DialogResult del formulario (a cualquier valor de DialogResult.None ) en algún controlador de eventos. Cuando su código salga del controlador de eventos, el motor de WinForm ocultará el formulario y el código que sigue a la llamada inicial ShowDialog método ShowDialog continuará su ejecución.

private cmdClose_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.Cancel;
}

El código de llamada puede capturar el valor de retorno de ShowDialog para determinar en qué botón hizo clic el usuario en el formulario. Cuando se muestra con ShowDialog() , el formulario no se elimina automáticamente (ya que simplemente se ocultó y no se cerró), por lo que es importante usar un bloque de using para garantizar que se elimine el formulario.

A continuación se muestra un ejemplo de OpenFileDialog verificar el resultado de usar OpenFileDialog , verificar el resultado y acceder a una propiedad desde el cuadro de diálogo antes de desecharlo.

using (var form = new OpenFileDialog())
{
    DialogResult result = form.ShowDialog();
    if (result == DialogResult.OK)
    {
        MessageBox.Show("Selected file is: " + form.FileName);
    }
}

También puede establecer la propiedad DialogResult en un botón. Al hacer clic en ese botón se establecerá la propiedad DialogResult en el formulario al valor asociado con el botón. Esto le permite cerrar el formulario sin agregar un controlador de eventos para establecer DialogResult en el código.

Por ejemplo, si agrega un botón Aceptar a su formulario y establece su propiedad en DialogResult.OK , el formulario se cierra automáticamente cuando presiona ese botón y el código de llamada recibe un DialogResult.OK a cambio de la llamada del método ShowDialog() .



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow