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:
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:
...
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:
...
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).
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
Funciona para mí también. –
He pegado el código aquí: http://pastebin.com/Dj81gAze –