2012-02-10 29 views
8

這裏有兩個問題,希望沒關係。MessageBoxResult與DialogResult

首先,我試圖提醒用戶何時退出我的應用程序,無論他們是否真的想退出。我的代碼如下:

private void exitToolStrip_Click(object sender, EventArgs e) 
{ 
    DialogResult mBoxResult = MessageBox.Show("Would you like to exit the program?", "Exit Program", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
    switch (mBoxResult) 
    { 
     case DialogResult.Yes: 
      this.Close(); 
      break; 
     case DialogResult.No: 
      break; 
    } 
} 

MSDN,我應該使用MessageBoxResult mBoxResult而非DialogResult mBoxResult。我正在使用.NET Framework 3.5。我看過herepre-3.0應該使用DialogResult,但如果我使用3.5,應該不是MessageBoxResult工作?

當我嘗試調用它,我得到

類型或命名空間名稱MessageBoxResult找不到(是 你缺少using指令或程序集引用?)。

但是,當我使用DialogResult時,它工作正常。爲什麼是這樣?

我的第二個問題是關於這段代碼:

case DialogResult.No: 
break; 

如果有人打對話框上的Cancel按鈕,這將是適當的把任何東西在裏面除了休息時間嗎?或者沒有它,一切都會正常工作?

+0

只需使用DialogResult,並確保您設置每個按鈕的結果類型,以便它被正確捕獲/返回..非常簡單的事情來檢查 – MethodMan 2012-02-10 16:56:36

回答

10

DialogResult用於WinForms。 MessageBoxResult適用於SilverLight。

只要break聲明對於No的情況可以。但是使用switch語句在這裏是過度的。 if (response == yes) Close();就足夠了。

但請注意,這不是一個理想的方式來做你想做的。如果用戶單擊窗口邊框上的關閉按鈕,或者按下ALT + F4,該怎麼辦?相反,你應該處理的FormClosing事件:

private void MyForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (MessageBox.Show("Would you like to exit the program?", "Exit Program", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) 
     e.Cancel = true; 
} 

通過設置e.Canceltrue,您取消窗體關閉。無所事事,你可以讓表格關閉。

7
  • 使用DialogResult如果你的應用是一個WinForms應用程序
  • 使用MessageBoxResult如果你的應用是一個WPF/Silverlight應用程序

正如你所看到的,命名空間是不同的:System.Windows.Forms(的WinForms)VS System.Windows (WPF)。