Why does closing a nested child dialog also close the parent dialog?

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-23 10:14:09

问题


I open a form as a modal dialog using ShowDialog. This dialog in turn allows another form to be opened as a modal dialog again using ShowDialog.

When the innermost dialog is closed, this causes its parent dialog to close as well. Why does this occur and how can I prevent it?

I have created a hello world version of the problem to illustrate this.

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));
}

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));
}

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;

Steps to reproduce:

  • Click "Open Form 2"
  • Click "Open Form 3"
  • Click "Cancel"

Form 3 closes with DialogResult == Cancel as expected, but Form 2 also closes with DialogResult == Cancel (not expected).


回答1:


EDIT :

the problem is this one (file: Form2.Designer.cs):

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

when you click the OpenForm3Button, after the end of the OpenForm3Button_Click event handler, the form.DialogResult is automatically set to Cancel and it is closed.

Reset the DialogResult property of OpenForm3Button and it will work as expected :)



来源:https://stackoverflow.com/questions/9792251/why-does-closing-a-nested-child-dialog-also-close-the-parent-dialog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!