为什么关闭嵌套子对话框也会关闭父对话框?
我使用ShowDialog打开一个表单作为modal dialog。 此对话框允许使用ShowDialog再次打开另一个窗体作为模式对话框。
当最里面的对话框关闭时,这也会导致其父对话框关闭。 为什么会发生这种情况,我该如何预防呢?
我已经创建了问题的hello world版本来说明这一点。
表格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:
... 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:
... 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
并关闭。
重置OpenForm3Button
的DialogResult
属性,它将按预期工作:)