3D-kreativ
3D-kreativ

Reputation: 9299

Problems with events

I'm using a form with a OK and a Cancel button. When the user click on the Cancel button, the user will get a message to confirm if the form should close or not. A click on OK = close, but when click on Cancel, the form should not close, but thats what is happening right know, and I have tested to add some event code for the form, but still closing. What can I do to Get it to work properly?

        // 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

    }

Upvotes: 0

Views: 117

Answers (3)

Dave Lucre
Dave Lucre

Reputation: 1155

I think you'll find that in your form's Designer.cs file you'll have the following line:

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

Remove this line and your form will no longer automatically close regardless of the result of your customer MessageBox.

Upvotes: 1

jacqijvv
jacqijvv

Reputation: 880

You can try the following, by adding the messagebox with the dialog result in the form closing event. I believe this is the better approach:

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

I think this is what you are looking for.

Upvotes: 2

Writwick
Writwick

Reputation: 2163

To Cancel Closing you can use the FormClosingEventArgs Property, ie, e.Cancel to true.

Use this code in FormClosing Event of the Form.

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

Upvotes: 0

Related Questions