2011-04-07 10 views
5

Tengo un formulario en el que hay un LogOutEvent y un evento de cierre de formulario. Aquí está el código,Evento de cierre desencadenado en UserClosing y this.close

private void btnLogOut_Click(object sender, EventArgs e) 
{ 
     DialogResult yesNo = MessageBox.Show(this, "Are you sure you want to Log Off?", "Log Off", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); 

     if (yesNo == DialogResult.Yes) 
     { 
      new LoginForm(); 
      this.Close(); 
      string tst2 = Logout(AgentId, AgentPwd, ExtensionId); 
      if (tst2 == "TCF000") 
       MessageBox.Show(" Logout Success"); 
      else 
       MessageBox.Show("Logout Failed"); 
     } 
} 

Y un cierre Ficha Evento

private void MainGUI_FormClosing(Object sender, FormClosingEventArgs e) 
{ 
     if (e.CloseReason == CloseReason.UserClosing) 
     { 
      DialogResult yesNo = MessageBox.Show(this, "Are you sure you want to Log Off?", "Log Off", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); 

      if (yesNo == DialogResult.Yes) 
      { 
       Application.Exit(); 
      } 
      else 
      { 
       e.Cancel = true; 
      } 
     } 
} 

Mi problema es que cuando hago clic en el botón de salir de su forma de llamar al evento de cierre. ¿Alguien puede aconsejar un mejor código para esto?

Cuando hago clic en cerrar 'X' debe cerrar la aplicación y cuando hago clic en Cerrar sesión, debe cerrar la ventana actual y acceder al formulario de inicio de sesión.

+0

está llamando a this.Close() para que desencadene el evento close – V4Vendetta

+1

@ V4Vendetta @Kragen @Marc Pero pensé que el CloseReason.UserClose solo se activaría cuando se hace clic en X. Estaba equivocado. Dime cuáles son los eventos desencadenantes para el cierre del formulario y cuándo se activarán –

+0

Esto podría [Ayuda] (http://stackoverflow.com/questions/3631490/bug-in-formclosingeventargs-closereason) – V4Vendetta

Respuesta

5

Estoy seguro de que hay una solución mejor, pero esto hace el trabajo:

private bool loggingOut; 

private void Form1_DoubleClick(object sender, EventArgs e) 
{ 
    this.loggingOut = true; 
    this.Close(); 
    // This is optional as we are closing the form anyway 
    this.loggingOut = false; 
} 

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason == CloseReason.UserClosing && !loggingOut) 
    { 
     // Handle form closing here 
    } 
} 

Esto permite que el controlador de eventos cierre de formulario para identificar si otro método hace uso de esta forma estrecha, y omitir el manejo normal si esto es.

alternativa usted puede simplemente Hide la forma en su lugar, y volver a utilizar la misma instancia de forma que la próxima vez que el usuario inicie en.

+0

Gracias, esto es trabajando .. –

2

así ... sí! la forma se está cerrando; ¿Por qué no desencadenó el evento?

Si el CloseReason no ayuda, entonces simplemente lance un campo bool en el formulario que establece en verdadero cuando hace clic en cerrar sesión; y verifique ese campo en el evento de cierre.

Cuestiones relacionadas