簡體   English   中英

C#WINForm避免出現兩個消息框

[英]C# WINForm avoid two message box

我有一個帶有“退出”按鈕的GUI程序。 單擊此按鈕時,它將調用Application.Exit()關閉該程序。 在關閉程序之前,它還會調用一個確認消息框。 我還為該GUI主窗體實現了關閉事件。 在這種情況下,它還會調用一個確認消息框,然后調用Application.Exit()。

現在,當我剛剛關閉GUI時,它將彈出一個確認消息框,然后將其關閉,一切都很好。 當我單擊“退出”按鈕時,它將彈出兩次確認消息框。 我認為當它調用Application.Exit()時,將調用Closing事件。

有什么方法可以避免兩次確認消息框?

最好的祝福,

您可以做的是從Application.Exit()方法中刪除確認按鈕,並將其保留在Closing Event中。 然后,不要直接在按鈕單擊事件中調用Application.Exit(),而是調用表單的Form.Close()方法。

這應該是您所需要的。 在您的窗體上調用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();
    }

如果關閉表單后應用程序周圍的邏輯未導致應用程序退出,則應僅在Form_Closed事件中調用Application.Exit ,如下所示:

    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        Application.Exit();
    }

您可以為消息使用全局鎖定對象。

每當您想要顯示一個消息框時,您都將編寫如下內容:

lock (mymessages)
{
  if (!nomoremessages)
  {
    MessageBox.Show("Hi");
    nomoremessages = true;
  }
}

這將確保僅顯示第一條消息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM