2012-05-13 16 views
0

私はOKとキャンセルボタンが付いたフォームを使用しています。ユーザーが[キャンセル]ボタンをクリックすると、フォームを閉じるかどうかを確認するメッセージが表示されます。 [OK]をクリックすると閉じるが、[キャンセル]をクリックするとフォームは閉じず、正しいことがわかっているので、フォームのイベントコードを追加してテストしたが、まだ閉じている。それを正しく動作させるには何ができますか?イベントに関する問題

 // 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プロパティをNoneに戻します。 –

答えて

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

さて、私は本当に混乱しています。ユーザーがフォームのどこかにある「キャンセル」ボタンをクリックすると、メッセージボックスが表示されますか?または、フォームを閉じるときに "MessageBoxにあるキャンセルボタン"をクリックしたDialogResultを処理したいですか? – jacqijvv

+0

私はOKボタンとCancelボタンがあるフォームを持っています。ユーザーが[OK]ボタンをクリックすると、アクションが実行され、フォームが閉じます。しかし、ユーザーが[キャンセル]ボタンをクリックすると、メッセージボックスが表示され、ユーザーが実際にフォームを閉じるかどうかを尋ねられ、ユーザーが[OK]をクリックするとフォームが終了し、ユーザーが[キャンセル]をクリックするとフォームが表示されたままになります。私はこれがはっきりしていることを望む?コードは機能していますが、フォームの[OK]ボタンをクリックしてもそのメッセージボックスが表示されます。フォームで[OK]をクリックすると、meassageboxは表示されません。 –

0

キャンセルする閉じるFormClosingEventArgsプロパティ、つまりe.Canceltrueを使用できます。

このコードをFormClosingに使用してください。

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

は、この行を削除し、フォームしなくなり、自動的に近い関わらず:

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でそれはあなたが次の行を持っていますファイルを見つけることだと思いますお客様のMessageBoxの結果。

関連する問題