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