2012-05-13 76 views
0

我正在使用帶有「確定」和「取消」按鈕的表單。當用戶點擊取消按鈕時,用戶將收到一條消息,確認表單是否應該關閉。點擊確定=關閉,但是當點擊取消時,表單不應該關閉,但這就是正確的事情,我已經測試過爲表單添加一些事件代碼,但仍然關閉。我能做些什麼才能使它正常工作?事件問題

 // Button - Cancel 
    private void btnCancel_Click(object sender, EventArgs e) 
    { 
     // Message box to confirm or not 
     if (MessageBox.Show("Do you really want to cancel and discard all data?", 
"Think twice!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==  
DialogResult.Yes) 
     { 
      // Yes 
      //this.Close(); // Closes the contact form 
      m_closeForm = false; 
     } 
     else 
     { 
      m_closeForm = false; 
      // No 
      // Do nothing, the user can still use the form 
     } 
    } 

    private void ContactForm_Formclosing(object sender, FormClosingEventArgs e) 
    { 

     if (m_closeForm) 

      e.Cancel = false; // Stänger formuläret. Inget skall hända 

     else 

      e.Cancel = true; // Stänger inte formuläret 

    } 
+2

「它不工作」是*從來沒有一個很好的描述。請閱讀http://tinyurl.com/so-hints並編輯您的問題。 –

+0

您的消息框與取消選項應該在您的表單關閉事件。 – jacqijvv

+0

將DialogResult屬性設置回無。 –

回答

2

您可以嘗試以下操作,方法是在窗體關閉事件中添加具有對話框結果的消息框。我相信這是更好的辦法:

private void btnCancel_Click(object sender, EventArgs e) 
    { 
     if (MessageBox.Show("Do you really want to cancel and discard all data?", "Think twice!", 
     MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) 
     { 
      this.Close(); 
     } 
     // Form wont close if anything else is clicked 
    } 

    private void btnOk_Click(object sender, EventArgs e) 
    { 
     // PerformAction() 
     this.Close(); 
    } 

我認爲這是你在找什麼。

+0

嗯,但它不是表單中的取消按鈕,它是關於當用戶單擊表單上的取消按鈕時出現的消息框中的取消按鈕。如果用戶單擊消息框中的取消按鈕,我希望該表單保持可見狀態。您的代碼中的消息框如何變得可見? –

+0

好吧,現在我真的很困惑。當用戶單擊位於表單某處的「取消」按鈕時,是否希望顯示一個消息框?或者當您關閉表單時,是否要處理單擊「消息框中的取消按鈕」的DialogResult? – jacqijvv

+0

我有一個確定和取消按鈕的窗體。當用戶單擊確定按鈕索姆行動將作出,表格應該關閉。但是,如果用戶單擊取消按鈕,則會出現一個消息框,詢問用戶是否真的要關閉表單,如果用戶單擊確定,表單應該關閉,如果用戶單擊取消,表單應該保持可見狀態。我希望這是明確的?你的代碼正在工作,但當我單擊窗體中的確定按鈕時,我也會收到該消息框。當單擊窗體中的確定時,不應該出現meassagebox –

0

要取消關閉,您可以使用FormClosingEventArgs屬性,即e.Canceltrue

使用此代碼的FormClosing表單的事件。

if (MessageBox.Show("Do you really want to cancel and discard all data?", 
"Think twice!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) ==  
DialogResult.Yes) 
{ 
    e.Cancel = false; 
} 
else 
{ 
    e.Cancel = true; 
} 
1

我想你會發現,在你的窗體的Designer.cs文件,你將有以下行:

this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 

刪除此行,你的形式將不再自動關閉不管您的客戶MessageBox的結果。