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.

Событие возникает при Close вызове, если нажата кнопка закрытия окна или если пользователь нажмет Alt + F4. ClosingThe 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.

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

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