web-dev-qa-db-ja.com

C#WPFアプリケーションを閉じる前にユーザーに尋ねる

アプリケーションを閉じる前にユーザーに質問したい。 C#.NET 4.0アプリケーションです。 WPFを使用しています。 Windowsフォームではできますが、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;
    }
}
24
Hooch

Application.Current.Shutdown()を呼び出した場合、Closingイベントはキャンセルできません。代わりにWindow.Close()メソッドを呼び出すだけで、閉じる操作を拒否する機会が与えられます。プログラムのすべてのウィンドウが閉じると、アプリケーションは自動的にシャットダウンします。

詳細については、MSDNの Application Management ページをご覧ください。

33
Alex McBride

YourMainWindow.Close()を呼び出し、前述のようにClosingイベントを使用するだけです。

8
Gus Cavalcanti
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;
}
7
halfevil

ユーザーにアプリケーションを閉じるかどうかを尋ねて、次のように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();
        }
    }