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 либо вызван один из методов 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 для свойства аргумента CancelEventArgs значение true
.
Событие Closing возникает при Close вызове, при нажатии кнопки Закрыть окна или нажатии клавиш ALT+F4.
Если собственное окно было открыто его окном владельца с помощью Show, а окно владельца закрыто, событие собственного Closing окна не вызывается. Если владелец окна закрыт (см. Owner), Closing не вызывается для собственного окна.
При Shutdown вызове Closing вызывается событие для каждого окна. Однако если Closing отмена отменена, отмена игнорируется.
Если сеанс завершается из-за выхода пользователя из системы или завершения работы, Closing не вызывается; дескриптор SessionEnding реализует код, отменяющий закрытие приложения.
Если вы хотите показать и скрыть окно несколько раз в течение времени существования приложения и не хотите повторно создавать окно при каждом его показе, можно обработать Closing событие, отменить его и вызвать Hide метод . Затем можно вызвать в Show том же экземпляре, чтобы повторно открыть его.