Спросите пользователя перед закрытием приложения C # WPF - PullRequest
23 голосов
/ 14 октября 2010

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

Работает, но только когда пользователь нажимает «Х». Когда пользователь нажимает кнопку с 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;
    }
}

Ответы [ 4 ]

31 голосов
/ 14 октября 2010

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

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

8 голосов
/ 14 октября 2010

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

6 голосов
/ 14 октября 2010
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;
}
1 голос
/ 21 ноября 2014

Почему бы вам просто не спросить пользователя, хочет ли он закрыть приложение, а затем вызвать 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();
        }
    }
...