C#WINForm避免两个消息框

时间:2009-09-08 05:32:25

标签: c# winforms

我有一个带有一个“退出”按钮的GUI程序。单击此按钮时,它将调用Application.Exit()来关闭此程序。在关闭程序之前,它还会调用确认消息框。我还为这个GUI主窗体实现了Closing Event。在这种情况下,它还会调用确认消息框,然后调用Application.Exit()。

现在,当我关闭GUI时,它会弹出一个确认消息框,然后关闭它,一切都很好。当我单击“退出”按钮时,它会弹出确认消息框两次。我想当它调用Application.Exit()时,会调用Closing事件。

是否有任何方法可以避免两次确认消息框?

最诚挚的问候,

3 个答案:

答案 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;
  }
}

这将确保只显示第一条消息。