6

我使用 ShowDialog 将表单作为模式对话框打开。该对话框反过来允许使用 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:

表格 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 == Cancel 关闭,但表格 2 也以 DialogResult == Cancel (非预期)关闭。

4

1 回答 1

16

编辑 :

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

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

当您单击 时,在事件处理程序OpenForm3Button结束后,将自动设置为并关闭。OpenForm3Button_Clickform.DialogResultCancel

重置的DialogResult属性,OpenForm3Button它将按预期工作:)

于 2012-03-20T18:07:31.007 回答