2015-06-13 45 views
2

我的應用程序在c#中關閉時遇到問題。當我點擊關閉按鈕時,它會顯示消息框兩次或更多次。我該怎麼辦?在視覺工作室c中關閉窗體事件#

private void home_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    DialogResult dialog = MessageBox.Show("Are you sure you want to really exit ? ", 
          "Exit", 
          MessageBoxButtons.YesNo, 
          MessageBoxIcon.Question); 
    if (dialog == DialogResult.Yes) 
    { 
     System.Windows.Forms.Application.Exit(); 
    } 
    else if (dialog == DialogResult.No) 
    { 
     this.Show(); 
    } 
} 
+0

我們可能需要更多的細節來回答這個問題。它曾經爲我工作得很好。我想你不止一次地添加了事件委託,系統調用你添加的每一個。 –

+0

在我的應用程序中,我創建了三個窗體。我用下面的代碼分別關閉所有表單... –

+0

不應該使用Form ** Closing **而不是FormClosed? – user3476093

回答

2

,你應該使用Form.FormClosing事件而不是FormClosed事件。在參數中,你會發現一個字段e.Cancel。通過此設置爲false,你把你的形式開放

+0

感謝您的回覆。但我使用visual studio 2012。所以沒有關鍵字'取消'。但那個關鍵詞是在Visual C#2012 Express ... –

+0

該領域已經與.Net 2.0一起引入。 (https://msdn.microsoft.com/library/system.windows.forms.formclosingeventargs_members(v=vs.80).aspx),所以應該有Visual Studio 2012的Cancel屬性。 – user287107

2

使用Form1_FormClosing事件,也不要使用Application.Exit()這樣的:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    var x = MessageBox.Show("Are you sure you want to really exit ? ", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 

    if (x == DialogResult.No) 
    { 
     e.Cancel = true; 
    } 
    else 
    { 
     e.Cancel = false; 
    } 
} 

或者這樣:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    e.Cancel = MessageBox.Show("Are you sure you want to really exit ? ", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No; 
} 
0

您可以通過查看避免多個提示如果Application.Exit()已經從FormClosing事件中已經被稱爲:

void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (e.CloseReason != CloseReason.ApplicationExitCall) 
     { 
      DialogResult dialog = MessageBox.Show("Are you sure you want to really exit ? ", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      if (dialog == DialogResult.Yes) 
      { 
       System.Windows.Forms.Application.Exit(); 
      } 
      else if (dialog == DialogResult.No) 
      { 
       e.Cancel = true; 
      } 
     } 
    } 
+0

感謝您的迴應,但在我的視覺工作室C#版本說沒有定義或異常方法稱爲'取消'...並且它說我缺少一個指令或程序集引用.. –

+0

你使用什麼版本?... –

+0

visual studio 2012 –

0

使用的形式結束事件。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     var confirmation = MessageBox.Show("Sure to close form", "Confirm", MessageBoxButtons.YesNo); 

     if (confirmation == System.Windows.Forms.DialogResult.No) 
     { 
      e.Cancel = true; //Even cancelled, form will not get closed now 
     } 
    }