Condividi tramite


Window.Closing Evento

Definizione

Si verifica direttamente dopo la chiamata a Close() e può essere gestito per annullare la chiusura della finestra.

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 evento

Eccezioni

Visibility è impostata oppure viene chiamato Show(), ShowDialog() o Close() durante la chiusura di una finestra.

Esempio

Nell'esempio seguente viene illustrato un Window oggetto che determina se è necessario l'intervento dell'utente per la chiusura.

<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

Commenti

Closing può essere gestito per rilevare quando una finestra viene chiusa, ad esempio quando Close viene chiamata. Inoltre, Closing può essere utilizzato per impedire la chiusura di una finestra. Per impedire la chiusura di una finestra, è possibile impostare la Cancel proprietà dell'argomento CancelEventArgs su true.

L'evento Closing viene generato quando Close viene chiamato, se si fa clic sul pulsante Chiudi di una finestra o se l'utente preme ALT+F4.

Se una finestra di proprietà è stata aperta dalla finestra del proprietario utilizzando Showe la finestra del proprietario viene chiusa, l'evento della finestra di Closing proprietà non viene generato. Se il proprietario di una finestra viene chiuso (vedere Owner), Closing non viene generato nella finestra di proprietà.

Se Shutdown viene chiamato , viene generato l'evento Closing per ogni finestra. Tuttavia, se Closing viene annullato, l'annullamento viene ignorato.

Se una sessione termina perché un utente si disconnette o si arresta, non viene generato. Closing Gestire SessionEnding per implementare il codice che annulla la chiusura dell'applicazione.

Se si desidera visualizzare e nascondere più volte una finestra durante la durata di un'applicazione e non si vuole reinstantiare la finestra ogni volta che viene visualizzata, è possibile gestire l'evento Closing , annullarlo e chiamare il Hide metodo . È quindi possibile chiamare Show sulla stessa istanza per riaprirla.

Si applica a

Vedi anche