Поделиться через


Window.Closing Событие

Определение

Происходит непосредственно после Close() вызова и может обрабатываться для отмены закрытия окна.

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имеет значение set, or , или Show()ShowDialog()Close() вызывается во время закрытия окна.

Примеры

В следующем примере показано Window , что определяет, требуется ли вмешательство пользователя для закрытия.

<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 можно использовать для предотвращения закрытия окна. Чтобы предотвратить закрытие окна, можно задать Cancel для свойства аргумента CancelEventArgstrueзначение .

Событие Closing возникает при Close вызове, если кнопка закрытия окна нажимается или если пользователь нажимает КЛАВИШИ ALT+F4.

Если окно владельца было открыто его окном владельца, а Showокно владельца закрыто, событие собственного окна Closing не вызывается. Если владелец окна закрыт (см. ) OwnerClosing не вызывается в собственном окне.

При Shutdown вызове Closing вызывается событие для каждого окна. Однако, если Closing отмена отменена, отмена игнорируется.

Если сеанс заканчивается, так как пользователь отключает или завершает работу, не вызывается; Closing дескриптор SessionEnding для реализации кода, который отменяет закрытие приложения.

Если вы хотите отобразить и скрыть окно несколько раз в течение времени существования приложения, и вы не хотите повторно создавать окно при каждом его показе, вы можете обрабатывать Closing событие, отменять его и вызывать Hide метод. Затем можно вызвать Show тот же экземпляр, чтобы повторно открыть его.

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

См. также раздел