2016-01-01 65 views
2

當用戶點擊應用程序右上角的紅色「X」按鈕時,我似乎很難彈出對話框並正常工作。我可以讓Dialog看看他們是否真的想關閉應用程序,但不管他們點擊什麼,它都會關閉窗體。我的代碼如下:C#Windows Form_Closing Issue

  private void Main_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     DialogResult dr = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.OKCancel); 
     if (dr == DialogResult.Cancel) 
     { 
      e.Cancel = false; 
     } 
    } 

我也嘗試過,而不是e.Cancel來檢查dr是否等於ok,但同樣的情況發生。

有什麼想法?

+1

'e.Cancel = true;'取消操作。 – bansi

回答

3

e.Cancel = true;取消操作。它默認爲false。你並沒有把它設置在任何地方。嘗試這個。

private void Main_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    DialogResult dr = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.OKCancel); 
    if (dr == DialogResult.Cancel) 
    { 
     e.Cancel = true; 
    } 
} 

oneliner:

e.Cancel = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.OKCancel) == DialogResult.Cancel; 
+1

好吧,我讓它工作它不是博士!= DialogResult.Cancel但博士== DialogResult。感謝您的幫助 – tserio

+0

啊我沒有看到您的對話文本。現在可以修復它 – bansi

+0

還有一個問題給你。我在菜單欄中有一個也關閉表單的按鈕,但問題是,我已將它設置爲相同類型的代碼。我點擊確定後,它會運行form_closing代碼,所以我有一個雙重對話框發生。有什麼想法嗎? – tserio

0

的問題是,你永遠不會設置e.Canceltrue。我會修改你的消息框來顯示是和否按鈕,因爲我覺得它使更清晰的用戶,然後我就只設置e.Cancel爲true,如果用戶選擇關閉事件發生時,作爲第

private void Main_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    DialogResult dr = MessageBox.Show("Are you sure want to close?", "Close Program", MessageBoxButtons.YesNo); 
    e.Cancel = dr == DialogResult.No; 
} 
0

表格正在關閉。當表單關閉時,釋放對象內創建的所有資源並處理表單。如果您取消此活動,表單將保持打開狀態。 要取消表單的關閉,請將傳遞給您的事件處理程序的CancelEventArgs的Cancel屬性設置爲true。

e.Cancel = true;