[英]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.