Window.Closing Evento
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Ocorre imediatamente após Close() ser chamada e pode ser tratada para cancelar o fecho da janela.
public:
event System::ComponentModel::CancelEventHandler ^ Closing;
public event System.ComponentModel.CancelEventHandler Closing;
member this.Closing : System.ComponentModel.CancelEventHandler
Public Custom Event Closing As CancelEventHandler
Tipo de Evento
Exceções
Visibility é definido, ou Show(), ShowDialog(), ou Close() é chamado enquanto uma janela está a fechar.
Exemplos
O exemplo seguinte demonstra um Window que determina se precisa de intervenção do utilizador para fechar.
<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
Observações
Closing pode ser tratado para detetar quando uma janela está a ser fechada (por exemplo, quando Close é chamada). Além disso, Closing pode ser usado para evitar que uma janela feche. Para evitar que uma janela feche, pode definir a Cancel propriedade do CancelEventArgs argumento para true.
O Closing evento é ativado quando Close é chamado, se o botão Fechar de uma janela for clicado, ou se o utilizador pressionar ALT+F4.
Se uma janela de propriedade foi aberta pela janela do proprietário usando Show, e a janela do dono estiver fechada, o evento da Closing janela de propriedade não é elevado. Se o proprietário de uma janela estiver fechada (ver Owner), Closing não está elevado na janela possuída.
Se Shutdown for chamado, o Closing evento para cada janela é elevado. No entanto, se Closing for cancelado, o cancelamento é ignorado.
Se uma sessão terminar porque um utilizador desliga ou encerra, Closing não é levantada; handle SessionEnding para implementar código que cancela o encerramento da aplicação.
Se quiseres mostrar e esconder uma janela várias vezes durante a vida útil de uma aplicação, e não quiseres reinstanciar a janela cada vez que a mostras, podes gerir o Closing evento, cancelá-lo e chamar o Hide método. Depois, podes ligar Show para a mesma instância para o reabrir.