Reputation: 9299
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
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
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
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