Window.Closing イベント

定義

Close() が呼び出された直後に発生します。これを処理して、ウィンドウが閉じるのをキャンセルすることができます。

public:
 event System::ComponentModel::CancelEventHandler ^ Closing;
public event System.ComponentModel.CancelEventHandler Closing;
member this.Closing : System.ComponentModel.CancelEventHandler 
Public Custom Event Closing As CancelEventHandler 

イベントの種類

例外

Visibility が設定されているか、ウィンドウを閉じている間に Show()ShowDialog()、または Close() が呼び出されました。

次の例では、 Window 閉じるのにユーザーの介入が必要かどうかを判断する を示します。

<Window 
  x:Class="CSharp.DataWindow"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Closing="DataWindow_Closing"  
    >
  <Grid>
    <TextBox Name="documentTextBox" AcceptsReturn="True" AcceptsTab="True" TextChanged="documentTextBox_TextChanged"></TextBox>
  </Grid>
</Window>
using System; // EventArgs
using System.ComponentModel; // CancelEventArgs
using System.Windows; // window

namespace CSharp
{
    public partial class DataWindow : Window
    {
        // Is data dirty
        bool isDataDirty = false;

        public DataWindow()
        {
            InitializeComponent();
        }

        void documentTextBox_TextChanged(object sender, EventArgs e)
        {
            this.isDataDirty = true;
        }

        void DataWindow_Closing(object sender, CancelEventArgs e)
        {
            MessageBox.Show("Closing called");

            // If data is dirty, notify user and ask for a response
            if (this.isDataDirty)
            {
                string msg = "Data is dirty. Close without saving?";
                MessageBoxResult result = 
                  MessageBox.Show(
                    msg, 
                    "Data App", 
                    MessageBoxButton.YesNo, 
                    MessageBoxImage.Warning);
                if (result == MessageBoxResult.No)
                {
                    // If user doesn't want to close, cancel closure
                    e.Cancel = true;
                }
            }
        }
    }
}
Imports System ' EventArgs
Imports System.ComponentModel ' CancelEventArgs
Imports System.Windows ' window

Namespace VisualBasic
    Partial Public Class DataWindow
        Inherits Window
        ' Is data dirty
        Private isDataDirty As Boolean = False

        Public Sub New()
            InitializeComponent()
        End Sub

        Private Sub documentTextBox_TextChanged(ByVal sender As Object, ByVal e As EventArgs)
            Me.isDataDirty = True
        End Sub

        Private Sub DataWindow_Closing(ByVal sender As Object, ByVal e As CancelEventArgs)
            MessageBox.Show("Closing called")

            ' If data is dirty, notify user and ask for a response
            If Me.isDataDirty Then
                Dim msg As String = "Data is dirty. Close without saving?"
                Dim result As MessageBoxResult = MessageBox.Show(msg, "Data App", MessageBoxButton.YesNo, MessageBoxImage.Warning)
                If result = MessageBoxResult.No Then
                    ' If user doesn't want to close, cancel closure
                    e.Cancel = True
                End If
            End If
        End Sub
    End Class
End Namespace

注釈

Closing は、ウィンドウが閉じられている (たとえば、 Close が呼び出されたとき) を検出するために処理できます。 さらに、 を使用して、 Closing ウィンドウが閉じないようにすることができます。 ウィンドウが閉じないようにするには、 引数の プロパティを CancelCancelEventArgstrue設定します。

イベントは Closing 、 が呼び出されたとき Close 、ウィンドウの [閉じる] ボタンがクリックされた場合、またはユーザーが Alt キーを押しながら F4 キーを押すと発生します。

を使用して Show所有者ウィンドウによって所有ウィンドウが開き、所有者ウィンドウが閉じている場合、所有ウィンドウの Closing イベントは発生しません。 ウィンドウの所有者が閉じている場合 (「」を参照) OwnerClosing は、所有ウィンドウでは発生しません。

Shutdownが呼び出されると、各ウィンドウのClosingイベントが発生します。 ただし、 が取り消された場合 Closing 、取り消しは無視されます。

ユーザーがログオフまたはシャットダウンしたためにセッションが終了した場合、 Closing は発生しません。アプリケーションの終了を取り消すコードを実装するための ハンドル SessionEnding

アプリケーションの有効期間中にウィンドウの表示と非表示を複数回行う場合に、ウィンドウを表示するたびにウィンドウを再インスタンス化したくない場合は、イベントを Closing 処理し、取り消し、メソッドを Hide 呼び出すことができます。 その後、同じインスタンスで を呼び出 Show して、再度開くことができます。

適用対象

こちらもご覧ください