Почему закрытие вложенного дочернего диалога также закрывает родительский диалог? - PullRequest
5 голосов
/ 20 марта 2012

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

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

Я создал версию этой проблемы, чтобы проиллюстрировать это.

Форма 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 == Отмена, как и ожидалось, но Форма 2 также закрывается с DialogResult == Отмена (не ожидается).

1 Ответ

15 голосов
/ 20 марта 2012

РЕДАКТИРОВАТЬ:

проблема заключается в следующем (файл: Form2.Designer.cs):

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

при нажатии OpenForm3Button после окончанияобработчика события OpenForm3Button_Click, form.DialogResult автоматически устанавливается на Cancel и закрывается.

Сбросьте свойство DialogResult OpenForm3Button, и оно будет работать как положено:)

...