Double confirmation program exiting - c#

somehow i dont know my program needs a second confirmation to exit...how can i remove it?
private void MainProg_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult dialog = MessageBox.Show("Θέλετε πραγματικά να κλείσει η εφαρμογή?",
"Κλείσιμο", MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes )
{
Application.Exit();
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
}
}

Your call to Application.Exit causes a second call to MainProg_FormClosing. Exiting the application is handled automatically; the call to Application.Exit is unnecessary.
You can simply remove the call to Application.Exit to prevent the second confirmation dialog:
DialogResult dialog = MessageBox.Show("Θέλετε πραγματικά να κλείσει η εφαρμογή?",
"Κλείσιμο", MessageBoxButtons.YesNo);
if (dialog == DialogResult.No)
{
e.Cancel = true;
}
Edited to add:
If you need to call Application.Exit (e.g., multiple message pumps), you can suppress the dialog if the form is being closed due to an Application.Exit call:
private void MainProg_FormClosing(object sender, FormClosingEventArgs e)
{
// Add this line:
if (e.CloseReason == CloseReason.ApplicationExitCall) return;
// remainder of code as in original:
DialogResult dialog = MessageBox.Show("Θέλετε πραγματικά να κλείσει η εφαρμογή?",
"Κλείσιμο", MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes )
{
Application.Exit();
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
}
}

The problem is you're callng FormClosing when using Application.Exit because Application.Exit also callFormClosing so you need to do this
DialogResult dialog = MessageBox.Show("Θέλετε πραγματικά να κλείσει η εφαρμογή?",
"Κλείσιμο", MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes)
{
e.Cancel = false;
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
}

Related

Back button affected by FormClosing event

I want to go back to the form1 but everytime I click the back button, it triggers the FormClosing event so it prompts me if I want to quit the application. How can I solve this problem in order to exclude the other buttons from the FormClosing event?
private void Form2_FormClosing_1(object sender, FormClosingEventArgs e)
{
DialogResult dialog = MessageBox.Show("Do you really want to quit?", "Exit",
MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes)
{
Application.Exit();
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
}
}
private void back_button_Click(object sender, EventArgs e)
{
this.Hide();
}
Best thing to do would be to set global variable that will tell closing event to show/not show that dialog.
Try something along these lines.
private bool CalledFromButton = false;
private void Form2_FormClosing_1(object sender, FormClosingEventArgs e)
{
if(CalledFromButton)
return;
DialogResult dialog = MessageBox.Show("Do you really want to quit?", "Exit",
MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes)
{
Application.Exit();
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
}
}
private void back_button_Click(object sender, EventArgs e)
{
CalledFromButton = true;
this.Hide();
}

C# Application Restart

I have a log-out option on my WinForms Application that uses this code:
// restart the application once user click on Logout Menu Item
private void eToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Restart();
}
Clicking the Log out option brings up the "are you sure" box with "Yes" or "No"
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
//Double check if user wants to exit
var result = MessageBox.Show("Are you sure you want to exit?", "Message",
MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (result == DialogResult.Yes)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
, yes works no problem, but clicking "No" still restarts the application, how do i fix this?
Put the dialog box like this inside the MenuItem_Click:
// restart the application once user click on Logout Menu Item
private void eToolStripMenuItem_Click(object sender, EventArgs e)
{
//Double check if user wants to exit
var result = MessageBox.Show("Are you sure you want to exit?", "Message",
MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (result == DialogResult.Yes)
{
Application.Restart();
}
}
Leave your FormClosing event empty:
private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
{
}
The other way of doing it would be if you absolutely want the dialog box to be implemented in the FormClosing event to override the OnFormClosing()
You can do this like this:
protected override void OnFormClosing(FormClosingEventArgs e) {
//Double check if user wants to exit
var result = MessageBox.Show("Are you sure you want to exit?", "Message",
MessageBoxButtons.YesNo, MessageBoxIcon.Information);
if (result == DialogResult.Yes)
e.Cancel = true;
base.OnFormClosing(e);
}
In this case also the FormClosing event will remain empty.
DialogResult confirm = MessageBox.Show("confirm Exit?", "exit", MessageBoxButtons.YesNo);
if (confirm==DialogResult.Yes)
Application.Restart();
else
{
//do some thing
}

VS2015 Closing Windows Form not working properly

I have VS2015 Windows Form, and whenever I click X to close application, it prompts me to close it or not. When I press No, then the pop up window would close. However, when I press Yes, it pops up another same window, and asks me to close it or not.
How can I solve this issue? I want to close my form at first popup.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
const string closemsg = "Do you really want to close the program?";
const string exit = "Exit";
DialogResult dialog = MessageBox.Show(closemsg, exit, MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes)
{
Application.Exit();
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
}
}
It is very simple.
Make remove Application.Exit();
Application.Exit() generates the FormClosing event.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
const string closemsg = "Do you really want to close the program?";
const string exit = "Exit";
DialogResult dialog = MessageBox.Show(closemsg, exit, MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes)
{
//Remove Application.Exit();
//Application.Exit();
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
}
}
However, when I press Yes, it pops up another same window, and asks me to close it or not.
The reason is because your Form1_FormClosing will be called again. Try setting a _isExiting flag that you can test upon entry.
Try this:
bool _isExiting;
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (_isExiting)
{
// whoops, been here already, time to go!
return;
}
const string closemsg = "Do you really want to close the program?";
const string exit = "Exit";
DialogResult dialog = MessageBox.Show(closemsg, exit, MessageBoxButtons.YesNo);
if (dialog == DialogResult.Yes)
{
_isExiting=true; // set flag here so we don't repeat this exercise again
Application.Exit();
}
else if (dialog == DialogResult.No)
{
e.Cancel = true;
}
}

Click "yes" double when closing form C#?

I write a code for event close form C#. It works, but when I click "yes" to close form I must click twice.
What wrong with it? And how can I fix this problem?
Here is my code
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show("Sure?", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.No)
{
Application.Exit();
}
else
{
e.Cancel = true;
}
}
Your logic right now will run e.Cancel = true if you click yes, as in it cancels the closing.
Also, as mentioned in the comments, Application.Exit() is not necessary.
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show("Sure?", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result != DialogResult.Yes)
e.Cancel = true;
}
A simpler version would be something like this:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = (MessageBox.Show("Sure?",
"Exit",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question) == DialogResult.Yes);
}
If the use clicks the Yes button, then e.Cancel will be set to true.
If e.Cancel is set to true, the form will not close.
otherwise let the form closing sequence run it's course.
Calling the Application.Exit will trigger the FormClosing event again. The solution is easier than you think:
if (result == DialogResult.No)
{
e.Cancel = false; //It works as you expected
}
else
{
e.Cancel = true;
}

How to prevent or block closing a WinForms window?

How can I prevent window closing by showing a MessageBox? (Technology:WinForms with C#)
When the close event occurs I want the following code to be run:
private void addFile_FormClosing( object sender, FormClosingEventArgs e ) {
var closeMsg = MessageBox.Show( "Do you really want to close?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question );
if (closeMsg == DialogResult.Yes) {
//close addFile form
} else {
//ignore closing event
}
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e) {
var window = MessageBox.Show(
"Close the window?",
"Are you sure?",
MessageBoxButtons.YesNo);
e.Cancel = (window == DialogResult.No);
}
Catch FormClosing event and set e.Cancel = true
private void AdminFrame_FormClosing(object sender, FormClosingEventArgs e)
{
var res = MessageBox.Show(this, "You really want to quit?", "Exit",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2);
if (res != DialogResult.Yes)
{
e.Cancel = true;
return;
}
}
A special twist might be to always prevent just the user closing the form:
private void Frm_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = (e.CloseReason == CloseReason.UserClosing);
// disable user closing the form, but no one else
}
Within your OnFormClosing event you can show the dialog and if answer is false (to not show) then set the Cancel property of the EventArgs to true.
For prevent or block the form closing in particular situation you can use this strategy:
private void MyForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (FLAG_CONDITION == true)
{
MessageBox.Show("To exit save the change!!");
e.Cancel = true;
}
}
Straight from MSDN:
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// Determine if text has changed in the textbox by comparing to original text.
if (textBox1.Text != strMyOriginalText)
{
// Display a MsgBox asking the user to save changes or abort.
if(MessageBox.Show("Do you want to save changes to your text?", "My Application",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
// Cancel the Closing event from closing the form.
e.Cancel = true;
// Call method to save file...
}
}
}
In your case you don't need to do anything to explicitly close the form. Unless you cancel it it will close automatically, so your code would be:
private void addFile_FormClosing( object sender, FormClosingEventArgs e ) {
var closeMsg = MessageBox.Show( "Do you really want to close?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Question );
if (closeMsg == DialogResult.Yes) {
// do nothing
} else {
e.Cancel = true;
}
}
You can run any code you want when closing the form then, hide the form instead of closing it to prevent it from being disposed
yourFormName.FormClosing += (s, e) =>
{
// any code you want
yourFormName.Hide(); // this hides the form
e.Cancel = true; // this cancels the close event, you can put any boolean exprission
};

Categories