C# 无论单击哪个按钮,我的新表单都会关闭

C# 无论单击哪个按钮,我的新表单都会关闭,c#,forms,dialog,windows-applications,C#,Forms,Dialog,Windows Applications,单击“显示图像”时,My Form1将打开一个新表单。当MW3Images出现时,无论我单击“下一步”、“上一步”还是“关闭”,它都会关闭。我已将“取消按钮”选项设置为使用“关闭”按钮,但更改它没有任何区别。 以下是“显示图像”按钮的源代码: 对于MW3Images表单: public MW3Images() { InitializeComponent(); pictureBox1.SizeMode = PictureBoxSizeMode.Stre

单击“显示图像”时,My Form1将打开一个新表单。当MW3Images出现时,无论我单击“下一步”、“上一步”还是“关闭”,它都会关闭。我已将“取消按钮”选项设置为使用“关闭”按钮,但更改它没有任何区别。 以下是“显示图像”按钮的源代码:

对于MW3Images表单:

   public MW3Images()
    {
        InitializeComponent();
        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        Controls.Add(pictureBox1);

        pictureBox1.Image = Properties.Resources.boxart;

        next.DialogResult = System.Windows.Forms.DialogResult.OK;
        previous.DialogResult = System.Windows.Forms.DialogResult.OK;
        imagesQuit.DialogResult = System.Windows.Forms.DialogResult.Cancel;
    }

    private void pictureBox1_Click(object sender, EventArgs e)
    { }
    private void Images_Load(object sender, EventArgs e)
    { }
    private void imagesQuit_Click(object sender, EventArgs e)
    { }
    private void next_Click(object sender, EventArgs e)
    { }
    private void previous_Click(object sender, EventArgs e)
    { }
}
我在“下一个”和“上一个”下有几个if语句,但它们的出现并不影响表单的关闭。
任何帮助都将不胜感激。谢谢

尝试此操作,为对话框设置所有者:

MW3Images.ShowDialog(this);

尝试此操作,设置对话框的所有者:

MW3Images.ShowDialog(this);

调用
.ShowDialog()
时,这是正确的行为。看

调用此方法时,它后面的代码直到对话框关闭后才会执行。通过将对话框指定给窗体上按钮的DialogResult属性或在代码中设置窗体的DialogResult属性,可以为对话框指定DialogResult枚举的一个值。然后该方法返回该值

与非模态窗体不同,当用户单击对话框的关闭窗体按钮或设置DialogResult属性的值时,.NET Framework不会调用Close方法。相反,窗体是隐藏的,可以再次显示,而无需创建对话框的新实例。由于显示为对话框的窗体是隐藏的而不是关闭的,因此当应用程序不再需要该窗体时,必须调用该窗体的Dispose方法

换句话说,只要您设置了一个
对话框result
,当点击表单上具有该结果的任何按钮时,就会发生这种情况,然后表单被隐藏,调用表单继续执行其代码


您应该使用
.Show()
而不是
.ShowDialog()
,或者不使用表单上按钮的
DialogResult
属性。相反,如果在设计器中双击它们,您将得到一个
\u click()
事件,您可以将代码放入其中。在这些函数中,您可以将加载下一个图像的代码放在其中,但是没有自动执行的方法。您必须自己编写。

调用
.ShowDialog()
时,这是正确的行为。看

调用此方法时,它后面的代码直到对话框关闭后才会执行。通过将对话框指定给窗体上按钮的DialogResult属性或在代码中设置窗体的DialogResult属性,可以为对话框指定DialogResult枚举的一个值。然后该方法返回该值

与非模态窗体不同,当用户单击对话框的关闭窗体按钮或设置DialogResult属性的值时,.NET Framework不会调用Close方法。相反,窗体是隐藏的,可以再次显示,而无需创建对话框的新实例。由于显示为对话框的窗体是隐藏的而不是关闭的,因此当应用程序不再需要该窗体时,必须调用该窗体的Dispose方法

换句话说,只要您设置了一个
对话框result
,当点击表单上具有该结果的任何按钮时,就会发生这种情况,然后表单被隐藏,调用表单继续执行其代码


您应该使用
.Show()
而不是
.ShowDialog()
,或者不使用表单上按钮的
DialogResult
属性。相反,如果在设计器中双击它们,您将得到一个
\u click()
事件,您可以将代码放入其中。在这些函数中,您可以将加载下一个图像的代码放在其中,但是没有自动执行的方法。你必须自己写。

你的
MW3Images
是你活动的本地
showImages\u点击
,它只存在于该活动的范围内,因此我相信当你退出该活动时,它被关闭。听起来好像有一个close调用在某个地方,每次都会执行,而不是只在单击“退出”后执行。您应该做的一件事是将
您的
代码移出构造函数,并将其放入OnInitialized()中method.CancelButton和AcceptButton仅用于定义用户按下Escape或Enter键时将按下的按钮。关闭窗体的属性是分配给按钮的DialogResult。如果单击其中一个,相应的值将分配给窗体的属性DialogResult,并且窗体已关闭(隐藏用于模式),我将不得不使用Show()而不是ShowDialog()。据我所知,它解决了我的问题。我想把重点放在新的形式上,但如果我不这样做就好了。感谢您的努力和专业知识(特别是@Bobson和@TMcKeown)。您的
MW3Images
是您活动的本地
showImages\u Click
,它只存在于该活动的范围内,因此我相信当您退出该活动时,它被关闭。听起来好像有一个close调用在某个地方,每次都会执行,而不是只在单击“退出”后执行。您应该做的一件事是将
您的
代码移出构造函数,并将其放入OnInitialized()中method.CancelButton和AcceptButton仅用于定义用户按下Escape或Enter键时将按下的按钮。关闭窗体的属性是分配给按钮的DialogResult。如果单击其中一个,相应的值将分配给窗体的属性DialogResult,并且窗体已关闭(隐藏用于模式),我将不得不使用Show()而不是ShowDialog()。据我所知,它解决了我的问题。我想把重点放在新的形式上,但如果我不这样做就好了。感谢您的努力和专业知识(尤其是@Bobson和@TMcKeown)。在构造函数中修改该集合没有什么错。这就是Visual Studio在
InitializeComponent()中自动执行的操作