簡體   English   中英

如何在FormClosing事件中顯示MessageBox以提示取消?

[英]How to display a MessageBox in a FormClosing event to prompt for cancellation?

我正在使用此代碼,但是它不起作用,我在做什么錯?

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
    {
        MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
    }
    else
    {
        e.Cancel = true;
        this.Activate();
    }
}

我猜您是從某個地方復制了此代碼,卻忘記了實際訂閱FormClosing事件。 在C#中,常見陷阱是VB.NET使用Handles關鍵字來避免此類錯誤。 選擇表單,在“屬性”窗口中單擊閃電圖標,然后雙擊FormClosing以添加用於訂閱事件的代碼。

也就是說,編寫這樣的代碼實際上沒有任何意義。 事件是供其他代碼獲取通知的類,而類不必偵聽自己的事件。 在Winforms中,每個事件都是由您可以覆蓋的受保護的OnXxxx()方法觸發的。 您可以在下面剪切和粘貼代碼,以取得成功,不需要任何其他代碼,例如事件訂閱代碼。 最重要的是,它首先優先考慮自定義事件處理程序,這是您尚不了解的代碼類型(還),應該在處理通知時獲得第一手的注意。

    protected override void OnFormClosing(FormClosingEventArgs e) {
        base.OnFormClosing(e);
        if (!e.Cancel) {
            if (MessageBox.Show("Really?", "Close", MessageBoxButtons.YesNo) != DialogResult.Yes) {
                e.Cancel = true;
            }
        }
    }

事件處理程序是否附在表單上? 要進行檢查,請轉到“表單屬性”,然后轉到“事件”選項卡,然后查看是否存在針對FormClosing事件的Form1_FormClosing。

如果已使用FormName.ShowDialog()打開此表單,則在FormClosing事件內部不足以設置e.Cancel = True。
您需要將FormName.DialogResult設置為DialogResult.None,MSDN上明確記錄的那樣

暫無
暫無

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

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