2010-10-14 43 views
20

Quiero preguntar al usuario antes de cerrar la aplicación. Aplicación I's C# .NET 4.0. Estoy usando WPF. Puedo hacerlo en formularios de Windows, pero no en WPF. El evento se activa cuando el usuario desea cerrar la aplicación, aparece el mensaje Cuadro, no importa qué botón se presione (Sí o No) la aplicación siempre se cierra. ¿Por qué? ¿Dónde está el error?Pregunta al usuario antes de cerrar la aplicación C# WPF

Funciona, pero solo cuando el usuario presiona "X". Cuando el usuario presiona el botón con Application.Current.Shutdown(); no está trabajando.

private void MainWindowDialog_Closing(object sender, System.ComponentModel.CancelEventArgs e) 
{ 
    MessageBoxResult result = MessageBox.Show("Do you really want to do that?", "Warning", MessageBoxButton.YesNo, MessageBoxImage.Question); 
    if (result == MessageBoxResult.No) 
    { 
     e.Cancel = true; 
    } 
} 
+0

intenta insertar punto de interrupción y depurar el código – Andrey

+0

El ejemplo informados funciona bien para mí. Tal vez el problema está en una parte diferente del código? –

Respuesta

29

El evento de cierre no puede cancelarse si llama al Application.Current.Shutdown(). Simplemente llame al método Window.Close() en su lugar, lo que le dará la oportunidad de vetar la operación de cierre. Una vez que todas las ventanas de su programa se hayan cerrado, la aplicación se cerrará automáticamente.

Para obtener más información, consulte la página Application Management en MSDN.

5
private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (MessageBox.Show("Are you sure to exit?", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) 
     e.Cancel = false; 
    else 
     e.Cancel = true; 
} 
+0

Funciona, pero solo cuando el usuario presiona "X". Cuando el usuario presiona el botón con Application.Current.Shutdown(); no está trabajando. – Hooch

+0

Esta respuesta es para Windows Forms. La pregunta es para WPF. – tjmoore

8

Sólo tiene que llamar YourMainWindow.Close() y utilizar el evento de cierre como se describe antes.

+2

Es decir, no use Application.Current.Shutdown(). –

1

Por qué no le preguntas a usuario si desea cerrar la aplicación y luego llamar Application.Current.Shutdown() como esto

private void closeButton_Click(object sender, RoutedEventArgs e) 
    { 
     if (MessageBox.Show("Do you want to exit?", "Confirm", MessageBoxButton.YesNo) == MessageBoxResult.Yes) 
     { 
      Application.Current.Shutdown(); 
     } 
    } 
+0

Porque quería manejar todos los casos de "Cierre". – Hooch

Cuestiones relacionadas