Window.Closing イベント

定義

Close() が呼び出された直後に発生します。これを処理して、ウィンドウが閉じるのをキャンセルすることができます。Occurs directly after Close() is called, and can be handled to cancel window closure.

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() が呼び出されました。Visibility is set, or Show(), ShowDialog(), or Close() is called while a window is closing.

次の例は、ユーザーの介入を閉じる必要があるかどうかを判断する Window を示しています。The following example demonstrates a Window that determines whether it needs user intervention to close.

<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 can be handled to detect when a window is being closed (for example, when Close is called). さらに、Closing を使用すると、ウィンドウが閉じるのを防ぐことができます。Furthermore, Closing can be used to prevent a window from closing. ウィンドウが閉じないようにするには、CancelEventArgs 引数の Cancel プロパティを trueに設定します。To prevent a window from closing, you can set the Cancel property of the CancelEventArgs argument to true.

Closing イベントは、Close が呼び出されたとき、ウィンドウの [閉じる] ボタンがクリックされたとき、またはユーザーが ALT + F4 キーを押したときに発生します。The Closing event is raised when Close is called, if a window's Close button is clicked, or if the user presses ALT+F4.

所有ウィンドウが Showを使用して所有者ウィンドウによって開かれ、オーナーウィンドウが閉じている場合、所有ウィンドウの Closing イベントは発生しません。If an owned window was opened by its owner window using Show, and the owner window is closed, the owned window's Closing event is not raised. ウィンドウの所有者が閉じている場合 (「Owner」を参照)、所有ウィンドウで Closing が発生しません。If the owner of a window is closed (see Owner), Closing is not raised on the owned window.

Shutdown が呼び出されると、各ウィンドウの Closing イベントが発生します。If Shutdown is called, the Closing event for each window is raised. ただし、Closing が取り消された場合、キャンセルは無視されます。However, if Closing is canceled, cancellation is ignored.

ユーザーのログオフまたはシャットダウンによってセッションが終了した場合、Closing は発生しません。アプリケーションのクロージャをキャンセルするコードを実装するために SessionEnding を処理します。If a session ends because a user logs off or shuts down, Closing is not raised; handle SessionEnding to implement code that cancels application closure.

アプリケーションの有効期間中にウィンドウを何度も表示したり非表示にしたりする必要があり、表示するたびにウィンドウを再インスタンス化したくない場合は、Closing イベントを処理し、キャンセルして、Hide メソッドを呼び出すことができます。If you want to show and hide a window multiple times during the lifetime of an application, and you don't want to reinstantiate the window each time you show it, you can handle the Closing event, cancel it, and call the Hide method. 次に、同じインスタンスで Show を呼び出して、再度開くことができます。Then, you can call Show on the same instance to reopen it.

適用対象

こちらもご覧ください