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

    }
4

3 に答える 3

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();
    }

これがあなたが探しているものだと思います。

于 2012-05-13T08:30:23.633 に答える
1

フォームの Designer.cs ファイルに次の行があることがわかると思います。

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

この行を削除すると、顧客の MessageBox の結果に関係なく、フォームが自動的に閉じなくなります。

于 2012-08-20T00:14:30.313 に答える
0

クローズをキャンセルするには、FormClosingEventArgsプロパティ、つまりe.Cancelto を使用できますtrue

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;
}
于 2012-05-13T08:33:11.927 に答える