2010-10-14 19 views
20

Desidero chiedere all'utente prima di chiudere l'applicazione. Applicazione I's C# .NET 4.0. Sto usando WPF. Posso farlo in Windows Form, ma non in WPF. L'evento viene generato quando l'utente desidera chiudere l'app, viene visualizzata la finestra di messaggio, non importa quale pulsante sia premuto (Sì o No) l'applicazione si chiude sempre. Perché? Dov'è l'errore?Chiedere all'utente prima di chiudere l'applicazione C# WPF

Funziona, ma solo quando l'utente preme "X". Quando l'utente preme il pulsante con Application.Current.Shutdown(); non funziona.

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

tenta di inserire breakpoint ed eseguire il debug di questo codice – Andrey

+0

L'esempio che hai postato funziona bene per me. Forse il problema è in una parte diversa del codice? –

risposta

29

L'evento di chiusura non può essere annullato se si chiama Application.Current.Shutdown(). Basta chiamare il metodo Window.Close(), che ti darà la possibilità di porre il veto all'operazione di chiusura. Una volta che tutte le finestre del tuo programma sono chiuse, l'applicazione si spegnerà automaticamente.

Per ulteriori informazioni, consultare la pagina Application Management su 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

Funziona, ma solo quando l'utente preme "X". Quando l'utente preme il pulsante con Application.Current.Shutdown(); non funziona. – Hooch

+0

Questa risposta è per Windows Form. La domanda è per WPF. – tjmoore

8

Basta chiamare YourMainWindow.Close() e utilizzare l'evento di chiusura come descritto in precedenza.

+2

Cioè, non usare Application.Current.Shutdown(). –

1

Perché non basta chiedere all'utente se vuole chiudere l'applicazione e quindi chiamare Application.Current.Shutdown() come questo

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

Perché volevo gestire tutti i casi di "chiusura". – Hooch

Problemi correlati