2017-06-17 57 views
1

我有一個簡單的WinForm應用程序,我已經爲OnFormClosing定義了覆蓋,以便能夠請求退出確認並關閉sql連接。 它看起來像這樣:從MenuItem觸發OnFormClosing()

protected override void OnFormClosing(FormClosingEventArgs e) 
    { 
     switch (MessageBox.Show(this, "Really quit " + Application.ProductName + "?", 
        Application.ProductName, MessageBoxButtons.YesNo, 
        MessageBoxIcon.Exclamation)) 
     { 
      case DialogResult.Yes: 
       con.Close(); 
       Debug.WriteLine("Connection Closed"); 
       Debug.WriteLine("Exiting Application"); 
       Application.Exit(); 
       break; 
      default: 
       break; 
     } 
    } 

不幸的是,當我關閉表單中的「真,戒」 - 對話兩次彈出。 這是爲什麼呢?

+1

將斷點在OnFormClosing(),然後點擊第一個X鍵和後來退出菜單,檢查這兩個調用的調用堆棧,並從所有(這方法參見( s))OnFormClosing()方法的調用即將到來。 – VS1

+0

我的代碼中存在另一個問題,修復了這個問題。無論我在哪裏調用它,真正退出對話框都會彈出兩次。 – farosch

+0

我不太清楚如何讀取調用堆棧,但我認爲第二次從Application.exit()方法調用 – farosch

回答

2

使用事件,而不是覆蓋:

using System.Windows.Forms; 

namespace WindowsFormsApplication2 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_FormClosing (object sender, FormClosingEventArgs e) 
     { 
      var result = MessageBox.Show ("My App", "Really quit?", MessageBoxButtons.YesNo); 

      if (result == DialogResult.Yes) 
      { 
       // close connection 
      } 
      else 
      { 
       e.Cancel = true; 
      } 
     } 
    } 
} 
+0

這實際上使它更具可讀性!謝謝 – farosch