Search code examples
c#formclosing

Bug on Form Closing Event


I have a Messagebox to confirm the exit when the user clicks on the x icon and it works, but i just have to click the button Yes a few times until it closes. Anyone knows why or how can i fix it?

private void Interfaz_FormClosing(object sender, FormClosingEventArgs e)
    {
       DialogResult salir = MessageBox.Show("¿Seguro que desea cerrar el programa?",    "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (salir == DialogResult.Yes)
        {
            Application.Exit();
        }
        else
        {
            e.Cancel = true;
        }

Solution

  • Just test for no. You are already closing the form, there is no need to call Application.Exit and it will trigger a second call to FormClosing

    private void Interfaz_FormClosing(object sender, FormClosingEventArgs e)
    {
       DialogResult salir = MessageBox.Show("¿Seguro que desea cerrar el programa?",    "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
        if (salir == DialogResult.No)
            e.Cancel = true;
    }
    

    However, I suggest to add a test for the ClosingReason.

    private void Interfaz_FormClosing(object sender, FormClosingEventArgs e)
    {
       If(e.CloseReason == CloseReason.UserClosing)
       {
           DialogResult salir = MessageBox.Show("¿Seguro que desea cerrar el programa?",
                                "Advertencia", MessageBoxButtons.YesNo, 
                                MessageBoxIcon.Question);
            if (salir == DialogResult.No)
                e.Cancel = true;
        }
     }