2011-01-31 14 views
5

Estoy buscando solicitar al usuario que guarde los datos cuando cierren una ventana de formulario en una aplicación winforms. No puedo averiguar cómo activar el mensaje para el usuario, en caso de que haga clic en el cuadro rojo en la esquina superior derecha del formulario.Eventos de cierre de ventana en una aplicación winforms

Mi aplicación actualmente tiene una bandera booleana, que se establece en True en el evento textchanged. Por lo tanto, solo necesitaré verificar el valor booleano en cualquier evento que se desencadene mediante el cuadro rojo.

¿Algún consejo?

Respuesta

11

Necesita manejar el FormClosing event. Este evento se levanta justo antes de que el formulario esté a punto de cerrarse, ya sea porque el usuario hizo clic en el botón "X" en la barra de título o por cualquier otro medio.

Debido a que el evento se produce antes de se cierra el formulario, se le ofrece la oportunidad de cancelar el cierre del evento. Se le pasa una instancia de la clase FormClosingEventArgs en el parámetro e. Al configurar el e.Cancel property en True, puede cancelar un evento de cierre pendiente.

Por ejemplo:

Private Sub Form_Closing(ByVal sender As Object, ByVal e As FormClosingEventArgs) 
    If Not isDataSaved Then 
     ' The user has unsaved data, so prompt to save 
     Dim retVal As DialogResult 
     retVal = MessageBox.Show("Save Changes?", YesNoCancel) 
     If retVal = DialogResult.Yes Then 
      ' They chose to save, so save the changes 
      ' ... 
     ElseIf retVal = DialogResult.Cancel Then 
      ' They chose to cancel, so cancel the form closing 
      e.Cancel = True 
     End If 
     ' (Otherwise, we just fall through and let the form continue closing) 
    End If 
End Sub 
+0

Anulación OnFormClosing lugar. Preste atención a e.CloseReason. –

5

Si reemplaza el método de la forma OnFormClosing, usted tiene la oportunidad de notificar al usuario que se han realizado cambios, y la oportunidad de cancelar el cierre de la forma.

El evento le proporciona una instancia FormClosingEventArgs que tiene una propiedad CloseReason (que le indica por qué se cierra el formulario) así como una propiedad Cancelar, que puede establecer en True para detener el cierre del formulario.

5

I cuasi experimental este código para C# esperanza por lo que es útil que

protected override void OnFormClosing(FormClosingEventArgs e) 
      {    
       base.OnFormClosing(e); 
       if (PreClosingConfirmation() == System.Windows.Forms.DialogResult.Yes) 
       { 
        Dispose(true); 
        Application.Exit(); 
       } 
       else 
       { 
        e.Cancel = true; 
       } 
      } 

     private DialogResult PreClosingConfirmation() 
     { 
      DialogResult res = System.Windows.Forms.MessageBox.Show(" Do you want to quit?   ", "Quit...", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      return res; 
     } 
Cuestiones relacionadas