Closing Event

Window.Closing Event


Occurs directly after Close is called, and can be handled to cancel window closure.

Namespace:   System.Windows
Assembly:  PresentationFramework (in PresentationFramework.dll)

public event CancelEventHandler Closing

Exception Condition

Visibility is set, or Show, ShowDialog, or Close is called while a window is closing.

Closing can be handled to detect when a window is being closed (for example, when Close is called). Furthermore, Closing can be used to prevent a window from closing. To prevent a window from closing, you can set the Cancel property of the CancelEventArgs argument to true.

The Closing event is raised when Close is called, if a window's Close button is clicked, or if the user presses ALT+F4.

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. If the owner of a window is closed (see Owner), Closing is not raised on the owned window.

If Shutdown is called, the Closing event for each window is raised. However, if Closing is canceled, cancellation is ignored.

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.

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. Then, you can call Show on the same instance to reopen it.

The following example demonstrates a Window that determines whether it needs user intervention to close.

using System; // EventArgs
using System.ComponentModel; // CancelEventArgs
using System.Windows; // window

namespace CSharp
    public partial class DataWindow : Window
        // Is data dirty
        bool isDataDirty = false;
        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 = 
                    "Data App", 
                if (result == MessageBoxResult.No)
                    // If user doesn't want to close, cancel closure
                    e.Cancel = true;

.NET Framework
Available since 3.0
Available since 4.0
Return to top
© 2015 Microsoft