Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么关闭嵌套子对话框也会关闭父对话框?_C#_Winforms_Visual Studio 2010_Showdialog - Fatal编程技术网

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

C# 为什么关闭嵌套子对话框也会关闭父对话框?,c#,winforms,visual-studio-2010,showdialog,C#,Winforms,Visual Studio 2010,Showdialog,我使用ShowDialog以模式对话框的形式打开表单。此对话框反过来允许使用ShowDialog再次以模式对话框的形式打开另一个窗体 关闭最里面的对话框时,也会导致其父对话框关闭。为什么会发生这种情况?我如何预防 我创建了一个hello world版本的问题来说明这一点 表格1: private void OpenForm2Button_Click(object sender, EventArgs e) { Form2 testForm = new Form2(); Dialog

我使用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:

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

编辑:

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

单击
openform3按钮
时,在
openform3按钮结束后单击事件处理程序,
form.DialogResult
将自动设置为
Cancel
,并将其关闭


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

Mmh,我试过了。我们应该看到整个(真实的)代码来理解问题。您可以使用粘贴长代码段…我已将代码粘贴到此处:@warrenbrumeow:明白了,请检查我的答案;)不知道这是怎么回事。奇怪的是,它在我的主要项目中做到了这一点,在我建立的hello world项目中也做到了同样的事情。我一定两次都犯了同样的错误。现在效果很好。非常感谢。下次我会更仔细地检查类似的内容。@warrenbrumeow:如果您先添加“取消”按钮,然后复制它(使用CTRL-C或CTRL-mousedrag)来创建“打开”按钮,则前者的所有属性都会复制到后者中。这种情况经常发生。:)哦,哇。似乎我有这个bug,因为我首先在表单上设置了一个CancelButton,然后复制了这个按钮来创建第二个按钮。设置窗体的Cancel按钮似乎会自动设置按钮的DialogResult。很高兴知道。@nyrguds我刚刚发现,如果您在VS中dbl单击窗体的
CancelButton
属性,目的是在可用按钮之间循环,直到找到所需的按钮,它将对所有循环使用的按钮应用
DialogResult=System.Windows.Forms.DialogResult.Cancel
。一只大虫子。
this.OpenForm3Button.DialogResult = System.Windows.Forms.DialogResult.Cancel;