2012-05-08 173 views
1

我有一個C#GUI應用程序。當用戶點擊紅色'X'(關閉應用程序)時,我想顯示一條消息並詢問他是否真的想關閉它。關於DialogResult的應用程序關閉

我找到了一個解決方案:

 DialogResult dialog = MessageBox.Show("Do you really want to close the program?", "SomeTitle", MessageBoxButtons.YesNo); 
     if (dialog == DialogResult.Yes) 
     { 
      Application.Exit(); 
     }else if (dialog == DialogResult.No) 
     { 
      //don't do anything 
     } 

當用戶點擊「是」,該應用程序應完全終止。 (Application.Exit()是否正確?)

當用戶單擊「否」時,DialogResult/MessageBox應該關閉,但應用程序應該保持打開狀態。但是,它關閉了!

我該如何避免這種情況?

順便說一句:我使用Visual Studio 2010和Winforms。

+4

不這樣做的正確方法;這真的很煩人。 – SLaks

+1

我總是希望有一個「是的,該死的!」這樣的對話框上的按鈕,所以它不會再問我這樣一個愚蠢的事情,但還沒有看到過。將this.DialogResult屬性設回無,以防止它關閉。 –

+0

抱歉,這不是很有幫助。這是實施這個要求,所以這就是爲什麼我問;) – Nicky

回答

3

使用從表單中的FormClosing事件和FormClosingEventArgs取消該過程。

例如:

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     DialogResult dialog = dialog = MessageBox.Show("Do you really want to close the program?", "SomeTitle", MessageBoxButtons.YesNo); 
     if (dialog == DialogResult.No) 
     { 
      e.Cancel = true; 
     } 
    } 
+0

好吧,我應該期待3幾乎相同的迴應:(。 –

+0

謝謝!!!什麼是「e.Cancel」 - >什麼是e ?? – Nicky

+0

e是formcloseingeventargs。e.cancel意味着取消formclosing,因此它會打開。 –

2

使用窗體的FormClosing事件程序窗口。然後您可以設置e.Canceltrue如果用戶點擊沒有

this.FormClosing += (s, e) => { 
    DialogResult dialog = dialog = MessageBox.Show("Really close?", "SomeTitle", 
    MessageBoxButtons.YesNo); 
    if (dialog == DialogResult.No) 
    { 
    e.Cancel = true; 
    } 
}; 

我猜你正在使用FormClosed。你是?那就太晚了。

+0

好點。 FormClosed在事件列表中的FormClosing後被調用。 – MrWuf

0

試試這個

 this.FormClosing += new FormClosingEventHandler(delegate(object sender, FormClosingEventArgs e) 
     { 
      if (MessageBox.Show("Do you really want to exit this application?", MessageBoxButtons:=MessageBoxButtons.YesNo) == DialogResult.No) 
      { 
       e.Cancel = true; 
      } 
     }); 
0

參考木瀆的答案。

基本上除非你指定MessageBox.Show()的附加參數,否則DialogResult.Ok的默認值爲MessageBox

您發佈的代碼(減去您的小錯字dialog = dialog =)完全符合我的預期。

另外:Application.Exit()IS關閉應用程序:)