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.

При вызове 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.

Применяется к

Дополнительно