I am trying to make it so that the user is prompted to confirm exiting my program in c#, but for some reason, if they say "yes" they would like to exit, the confirmation box would pop up again. I can't figure out why.
if (MessageBox.Show("Are you sure you want to exit?", "Confirm exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
e.Cancel = true;
}
else { Application.Exit(); }
Ah, I figured out how to fix it. I removed the Application.Exit(); event from the FormClosing event, and moved it into the FormClosed event. It all works now.
As SFD he said you need to create the event with the message box. I've added to filter if the user it's closing the form and a warning messagebox:
private void close_confirmation(object sender, FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.FormOwnerClosing)
{
if (MessageBox.Show("Are you sure you want to close?", "Application", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
{
e.Cancel = true;
}
}
}
You nee to assign the event to the form to make it work:
this.FormClosing += new FormClosingEventHandler(close_confirmation);
If you want to make it stop so the user can close again the window without the message:
this.FormClosing -= close_confirmation;
Use this
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("Are you sure you want to close?", "Infomate", MessageBoxButtons.YesNo) == DialogResult.No)
{
e.Cancel = true;
}
}
Ah, did you check the CloseReason
for the FormClosing
event? I think you might get the same event for two different reasons (although I don't exactly expect that to happen normally); check your FormClosingEventArgs
to see what the parameters are.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With