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

我使用ShowDialog打开一个表单作为modal dialog。 此对话框允许使用ShowDialog再次打开另一个窗体作为模式对话框。

当最里面的对话框关闭时,这也会导致其父对话框关闭。 为什么会发生这种情况,我该如何预防呢?

我已经创建了问题的hello world版本来说明这一点。

表格1:

表格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:

表格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:

表格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 ==取消(不是预期)结束。

编辑:

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

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

单击OpenForm3Button ,在OpenForm3Button_Click事件处理程序结束后, form.DialogResult将自动设置为Cancel并关闭。

重置OpenForm3ButtonDialogResult属性,它将按预期工作:)