我有一个带有一个“退出”按钮的GUI程序。单击此按钮时,它将调用Application.Exit()来关闭此程序。在关闭程序之前,它还会调用确认消息框。我还为这个GUI主窗体实现了Closing Event。在这种情况下,它还会调用确认消息框,然后调用Application.Exit()。
现在,当我关闭GUI时,它会弹出一个确认消息框,然后关闭它,一切都很好。当我单击“退出”按钮时,它会弹出确认消息框两次。我想当它调用Application.Exit()时,会调用Closing事件。
是否有任何方法可以避免两次确认消息框?
最诚挚的问候,
答案 0 :(得分:4)
您可以执行的操作是从Application.Exit()方法中删除确认按钮,并将其保留在Closing Event中。然后直接在你的按钮点击事件中调用Application.Exit(),而不是调用表单的Form.Close()方法;
答案 1 :(得分:4)
这应该是你所需要的。在表单上调用Close方法将关闭表单,如果这是您在应用程序中运行的唯一表单,它也将结束应用程序。
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Really want to close?", "Closing"
, MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
}
}
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
如果您的应用程序周围的逻辑不会导致应用程序在表单关闭后退出,您应该在Application.Exit
事件中调用Form_Closed
,如下所示:
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
Application.Exit();
}
答案 2 :(得分:0)
您可以为邮件使用全局锁定对象。
每当你想要显示一个消息框时,你都会写下这样的内容:
lock (mymessages)
{
if (!nomoremessages)
{
MessageBox.Show("Hi");
nomoremessages = true;
}
}
这将确保只显示第一条消息。