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. ウィンドウが閉じないようにするには、 Cancel CancelEventArgs引数のプロパティをに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.

が呼び出されるとClosing 、各ウィンドウのイベントが発生します。 ShutdownIf 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.

適用対象

こちらもご覧ください