2010-12-05 26 views
9

Estoy haciendo una aplicación Win Forms para obtener más información ya que no tengo mucha experiencia con ella. En mi programa, en el formulario principal, tengo un botón. Al hacer clic en él se inicia otro formulario. El código es el siguiente:¿Cómo puedo hacer una pausa en la ejecución hasta que se cierre el nuevo formulario?

private void btn_AddCat_Click(object sender, EventArgs e) 
     { 
      this.Invoke(new MethodInvoker(() => 
      { 
       form_NewCat NewCatForm = new form_NewCat(); 
       NewCatForm.Show(); 
      })); 

      MessageBox.Show("Oops!");    
     } 

El problema es que cuando se pone en marcha la nueva forma, quiero ejecución del código detrás de la principal forma de hacer una pausa en ese punto hasta que la nueva forma se cierra. Como ejemplo, en el código anterior, no quiero '¡Uy!' imprimirse hasta que se cierre el nuevo formulario. ¿Cómo puedo lograr eso?

Respuesta

10

No necesita invocar cuando se encuentra en el hilo de la interfaz de usuario. Y está en el hilo de la interfaz de usuario en un controlador de eventos con botón y clic.

private void btn_AddCat_Click(object sender, EventArgs e) 
{ 
    form_NewCat NewCatForm = new form_NewCat(); 
    var dialogResult = NewCatForm.ShowDialog(); 
    MessageBox.Show("Oops!");    
} 

Puede comprobar el DialogResult para OK, Cancelar, Sí, No, etc si su form_NewCat establece this.DialogResult a cualquier valor antes del cierre. Esta es la forma habitual de indicar cómo el usuario salió del formulario/diálogo.

+0

gracias. Implementaré tu solución. – xbonez

+0

Cambié el controlador de eventos a exactamente lo que mostró. El nuevo formulario tiene un botón cancelar. El controlador de eventos para el botón cancelar lo ejecuta. Cerrar(). Sin embargo, cuando presiono el botón Cancelar, el formulario desaparece y luego vuelve a aparecer. Al presionar cancelar nuevamente se cierra el formulario. ¿Por qué es así? Mi nueva forma se muestra dos veces. – xbonez

+0

@xbonez, extraño, ¿estás seguro de que no tienes ningún otro código que muestre el formulario? Al igual que en el constructor? –

5

Simplemente cambie Mostrar para MostrarDialog; esto también permite obtener un valor de retorno para indicar si el formulario se considera salir con un estado específico (ok, cancelar, etc.).

13

Cambie la línea

NewCatForm.Show(); 

a

NewCatForm.ShowDialog(); 
6

¿Quieres un diálogo modal y creo que necesita NewCatForm.ShowDialog();

Cuestiones relacionadas