Почему закрытие вложенного дочернего диалогового окна также приводит к закрытию родительского диалогового окна?

Я открываю форму как модальный диалог, используя ShowDialog. Это диалоговое окно, в свою очередь, позволяет снова открыть другую форму как модальное диалоговое окно с помощью ShowDialog.

Когда самое внутреннее диалоговое окно закрывается, его родительский диалог также закрывается.Почему это происходит и как я могу предотвратить это?

Чтобы проиллюстрировать это, я создал версию задачи «Hello World».

Форма 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));
}

Форма 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));
}

Форма 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;

Шаги для воспроизведения:

  • Нажмите «Открыть форму 2»
  • Нажмите «Открыть форму 3»
  • Нажмите «Отмена»

Форма 3 закрывается с DialogResult == Cancel, как и ожидалось, но форма 2 также закрывается с DialogResult == Cancel (не ожидается).

5
задан Warren Blumenow 20 March 2012 в 17:58
поделиться