Compartir a través de


Window.Closing Evento

Definición

Se produce inmediatamente después de llamar a Close() y se puede controlar para que se cancele el cierre de la ventana.

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

Excepciones

Se establece la propiedad Visibility o se llama a Show(), ShowDialog() o Close() mientras se cierra una ventana.

Ejemplos

En el ejemplo siguiente se muestra un Window objeto que determina si necesita que el usuario intervenga para cerrarse.

<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

Comentarios

Closing se puede controlar para detectar cuándo se cierra una ventana (por ejemplo, cuando Close se llama a ). Además, Closing se puede usar para evitar que una ventana se cierre. Para evitar que una ventana se cierre, puede establecer la Cancel propiedad del CancelEventArgs argumento en true.

El Closing evento se genera cuando Close se llama a , si se hace clic en el botón Cerrar de una ventana o si el usuario presiona ALT+F4.

Si su ventana Showpropietaria se abrió mediante , y se cierra la ventana del propietario, no se genera el evento de Closing la ventana propiedad. Si el propietario de una ventana está cerrado (vea Owner), Closing no se genera en la ventana propiedad.

Si Shutdown se llama a , se genera el Closing evento de cada ventana. Sin embargo, si Closing se cancela, se omite la cancelación.

Si finaliza una sesión porque un usuario cierra sesión o se cierra, Closing no se genera; controle SessionEnding para implementar el código que cancela el cierre de la aplicación.

Si desea mostrar y ocultar una ventana varias veces durante la vigencia de una aplicación, y no desea volver a activar la ventana cada vez que la muestre, puede controlar el Closing evento, cancelarla y llamar al Hide método . A continuación, puede llamar a Show en la misma instancia para volver a abrirla.

Se aplica a

Consulte también