2012-03-20 23 views
5

Abro un formulario como un diálogo modal usando ShowDialog. Este diálogo a su vez permite que otro formulario se abra nuevamente como un cuadro de diálogo modal utilizando ShowDialog.¿Por qué cerrar el cuadro de diálogo secundario anidado también cierra el cuadro de diálogo primario?

Cuando se cierra el cuadro de diálogo más interno, esto provoca que su cuadro de diálogo principal se cierre también. ¿Por qué ocurre esto y cómo puedo prevenirlo?

He creado una versión del problema con hello world para ilustrar esto.

Formulario 1:

Form 1

private void OpenForm2Button_Click(object sender, EventArgs e) 
{ 
    Form2 testForm = new Form2(); 
    DialogResult dialogResult = new DialogResult(); 
    dialogResult = testForm.ShowDialog(); 
    MessageBox.Show("Form 2 returned: " + Convert.ToString(dialogResult)); 
} 

la Forma 2:

Form 2

... 
this.Form2OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; 
this.Form2CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 
... 
this.AcceptButton = this.Form2OKButton; 
this.CancelButton = this.Form2CancelButton; 
... 
private void OpenForm3Button_Click(object sender, EventArgs e) 
{ 
    Form3 testForm = new Form3(); 
    DialogResult dialogResult = new DialogResult(); 
    dialogResult = testForm.ShowDialog(); 
    MessageBox.Show("Form 3 returned: " + Convert.ToString(dialogResult)); 
} 

la Forma 3:

Form 3

... 
this.Form3OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; 
this.Form3CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 
... 
this.AcceptButton = this.Form3OKButton; 
this.CancelButton = this.Form3CancelButton; 

Pasos para reproducir:

  • Haga clic en "Open Form 2"
  • Haga clic en "Open Form 3"
  • clic en "Cancelar"

Forma 3 se cierra con DialogResult == Cancelar como se esperaba, pero el formulario 2 también se cierra con DialogResult == Cancelar (no esperado).

+0

Mmh, probé y [funciona bien en mi máquina] (http://codinghorror.typepad.com/.a/6a0120a85dcdae970b0128776ff992970c- Pi). Deberíamos ver el código completo (real) para entender el problema. Puede usar http://pastebin.com/ para pegar piezas largas de código ... – digEmAll

+0

Funciona para mí también. –

+0

He pegado el código aquí: http://pastebin.com/Dj81gAze –

Respuesta

14

EDIT:

el problema es este (archivo: Form2.Designer.cs):

this.OpenForm3Button.DialogResult = System.Windows.Forms.DialogResult.Cancel; 

cuando se hace clic en el OpenForm3Button, después del final del manipulador OpenForm3Button_Click evento, el form.DialogResult se ajusta automáticamente a Cancel y está cerrado.

restablecer la propiedad de DialogResultOpenForm3Button y funcionará como se esperaba :)

+0

No tengo idea de cómo se configuró. Lo extraño es que lo hizo en mi proyecto principal e hizo lo mismo en el mundo hello que configuré. Debo haber cometido el mismo error las dos veces. Funciona perfectamente ahora Muchas gracias. Voy a verificar cosas así más cuidadosamente la próxima vez. –

+3

@WarrenBlumenow: si primero agregó el botón cancelar y luego lo copió (utilizando CTRL-C o CTRL-mousedrag) para crear el botón de abrir, todas las propiedades de la primera se copian en esta última. Sucede muy a menudo. :) – digEmAll

+1

Oh, wow.Parece que tuve este error porque primero establecí un CancelButton en el formulario, y luego copié ese botón para hacer un segundo botón. Parece que al configurar el CancelButton del formulario se establece automáticamente el DialogResult del botón. Bueno saber. – Nyerguds

Cuestiones relacionadas