2010-10-14 12 views
20

Chcę zapytać użytkownika przed zamknięciem aplikacji. Aplikacja I # C# .NET 4.0. Używam WPF. Mogę to zrobić w formularzach systemu Windows, ale nie w WPF. Zdarzenie jest uruchamiane, gdy użytkownik chce zamknąć aplikację, pojawi się komunikat Box, bun bez względu na to, który przycisk zostanie naciśnięty (Tak lub Nie) aplikacja zawsze się zamyka. Czemu? Gdzie jest błąd?Zapytaj użytkownika przed zamknięciem aplikacji C# WPF

Działa, ale tylko wtedy, gdy użytkownik naciśnie "X". Kiedy użytkownik naciśnie przycisk z Application.Current.Shutdown(); to nie działa.

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

próby wstawienia Breakpoint i debugowania tego kodu – Andrey

+0

przykładzie pan pisał działa dobrze dla mnie. Może problem leży w innej części kodu? –

Odpowiedz

29

Zdarzenie zamknięcia nie może zostać anulowane, jeśli zadzwonisz pod numer Application.Current.Shutdown(). Po prostu wywołaj metodę Window.Close(), która da ci możliwość zawetowania operacji zamknięcia. Po zamknięciu wszystkich okien programu aplikacja automatycznie się wyłączy.

Aby uzyskać więcej informacji, odwiedź stronę MSDN na stronie Application Management.

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

Działa, ale tylko wtedy, gdy użytkownik naciśnie "X". Kiedy użytkownik naciśnie przycisk z Application.Current.Shutdown(); to nie działa. – Hooch

+0

Ta odpowiedź dotyczy Windows Forms. Pytanie dotyczy WPF. – tjmoore

8

Wystarczy zadzwonić YourMainWindow.Close() i korzystać z imprezy zamykającej jak opisano wcześniej.

+2

Oznacza to, że nie należy używać aplikacji Application.Current.Shutdown(). –

1

Dlaczego nie można po prostu poprosić użytkownika, czy chce, aby zamknąć aplikację, a następnie zadzwonić Application.Current.Shutdown() jak ten

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

Ponieważ chciałem obsłużyć wszystkie przypadki "zamknięcia". – Hooch

Powiązane problemy