C#のWPFでWindowを閉じる前に確認する

アプリを作成していると、Windowを閉じる前に「よろしいですか?」というような確認画面を出したい場合があります。

 

このような時、WPFではClosingイベントを使うと良いでしょう。

このイベントはウインドウを閉じようとした時(閉じてしまう前)に発生するイベントで、閉じる動作をキャンセルする事も可能です。

XAML

<Window x:Class="Test.TestWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Test"
        mc:Ignorable="d"
        Closing="Window_Closing">
</Window>

WindowクラスにClosingイベントを追加します。

ここでは「Windows_Closing」というメソッド名にしています。

ソース

    protected virtual void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
    {
        if (MessageBoxResult.Yes != MessageBox.Show("画面を閉じます。よろしいですか?", "確認", MessageBoxButton.YesNo, MessageBoxImage.Information);
        {
            e.Cancel = true;
            return;
        }
    }

メソッドの2番目の引数にある System.ComponentModel.CancelEventArgsオブジェクトの Cancel プロパティを使ってウインドウが閉じられる処理をキャンセルする事ができます。

 

上記の例では、Closingイベント内でメッセージボックスを出しています。

メッセージボックスでYesボタンがクリックされなかった場合には CancelEventArgs の Cancel プロパティに true をセットしてウインドウが閉じられる処理をキャンセルしています。