Window.Closing Window.Closing Window.Closing Window.Closing Event

定義

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.

場合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.

適用対象

こちらもご覧ください