形成关闭事件
本文关键字:事件 | 更新日期: 2023-09-27 17:56:16
我在 c# 中关闭应用程序时遇到问题。当我点击关闭按钮时,它会显示两次或更多次的消息框。我该怎么办?
private void home_FormClosed(object sender, FormClosedEventArgs e)
{
DialogResult dialog = MessageBox.Show("Are you sure you want to really exit ? ",
"Exit",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (dialog == DialogResult.Yes)
{
System.Windows.Forms.Application.Exit();
}
else if (dialog == DialogResult.No)
{
this.Show();
}
}
使用Form1_FormClosing
事件,也不要使用这样的Application.Exit()
:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
var x = MessageBox.Show("Are you sure you want to really exit ? ",
"Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (x == DialogResult.No)
{
e.Cancel = true;
}
else
{
e.Cancel = false;
}
}
或者像这样:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = MessageBox.Show("Are you sure you want to really exit ? ",
"Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No;
}
您应该
使用 Form.FormClosing
事件而不是 FormClosed
事件。 在参数中,您可以找到一个字段e.Cancel
。 通过将其设置为 false,您可以保持表单打开状态
您可以通过检查是否已从FormClosing
事件中调用Application.Exit()
来避免多个提示:
void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.ApplicationExitCall)
{
DialogResult dialog = MessageBox.Show("Are you sure you want to really exit ? ", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dialog == DialogResult.Yes)
{
System.Windows.Forms.Application.Exit();
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
}
}
}
请改用表单关闭事件。
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
var confirmation = MessageBox.Show("Sure to close form", "Confirm", MessageBoxButtons.YesNo);
if (confirmation == System.Windows.Forms.DialogResult.No)
{
e.Cancel = true; //Even cancelled, form will not get closed now
}
}