为什么关闭嵌套子对话框也会关闭父对话框?

时间:2012-03-20 17:49:18

标签: c# winforms visual-studio-2010 showdialog

我使用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结束==按预期取消,但表单2也以DialogResult ==取消(不是预期)结束。

1 个答案:

答案 0 :(得分:15)

编辑:

问题是这个问题(文件:Form2.Designer.cs):

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

当您点击OpenForm3Button后,在OpenForm3Button_Click事件处理程序结束后,form.DialogResult会自动设置为Cancel并且已关闭。

重置DialogResult的{​​{1}}属性,它将按预期工作:)