Подтвердить что ты не робот

Спросить пользователя перед закрытием приложения С# WPF

Я хочу спросить пользователя перед закрытием приложения. Приложение я С#.NET 4.0. Я использую WPF. Я могу сделать это в окнах, но не в WPF. Событие запускается, когда пользователь хочет закрыть приложение, появляется окно сообщения, булочка, независимо от того, какая кнопка нажата (Да или Нет), приложение всегда закрывается. Зачем? Где ошибка?

Он работает, но только когда пользователь нажимает "X". Когда пользователь нажимает кнопку с Application.Current.Shutdown(); он не работает.

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;
    }
}
4b9b3361

Ответ 1

Событие закрытия не может быть отменено, если вы вызываете Application.Current.Shutdown(). Просто вызовите метод Window.Close(), который даст вам возможность наложить вето на операцию закрытия. После закрытия всех окон программы приложение автоматически отключится.

Для получения дополнительной информации посетите страницу Управление приложениями в MSDN.

Ответ 2

Просто вызовите MyMainWindow.Close() и используйте событие Closing, как описано выше.

Ответ 3

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;
}

Ответ 4

Почему бы вам просто не спросить пользователя, хочет ли он закрыть приложение, а затем вызвать Application.Current.Shutdown(), как этот

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