Window.Closing Zdarzenie

Definicja

Występuje bezpośrednio po Close() wywołaniu i można go obsłużyć w celu anulowania zamknięcia okna.

public:
 event System::ComponentModel::CancelEventHandler ^ Closing;
public event System.ComponentModel.CancelEventHandler Closing;
member this.Closing : System.ComponentModel.CancelEventHandler 
Public Custom Event Closing As CancelEventHandler 

Typ zdarzenia

Wyjątki

Visibilityparametr jest ustawiony, lub Show()ShowDialog(), lub Close() jest wywoływany, gdy okno jest zamykane.

Przykłady

W poniższym przykładzie pokazano element Window , który określa, czy wymaga interwencji użytkownika w celu zamknięcia.

<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

Uwagi

Closing można obsługiwać, aby wykryć, kiedy okno jest zamykane (na przykład po Close wywołaniu). Ponadto można użyć polecenia , Closing aby zapobiec zamykaniu okna. Aby zapobiec zamykaniu okna, możesz ustawić Cancel właściwość argumentu CancelEventArgs na true.

Zdarzenie Closing jest wywoływane po Close wywołaniu, jeśli zostanie kliknięta przycisk Zamknij okna lub jeśli użytkownik naciśnie alt+F4.

Jeśli okno własności zostało otwarte przez okno właściciela przy użyciu polecenia Show, a okno właściciela jest zamknięte, zdarzenie okna własności Closing nie jest zgłaszane. Jeśli właściciel okna jest zamknięty (zobacz Owner), Closing nie jest wywoływany w oknie należącym do użytkownika.

Jeśli Shutdown jest wywoływana, zdarzenie Closing dla każdego okna jest zgłaszane. Jeśli Closing jednak anulowanie zostanie anulowane, anulowanie zostanie zignorowane.

Jeśli sesja zostanie zakończona, ponieważ użytkownik wyloguje się lub zamknie, nie zostanie podniesiony; Closing obsługa SessionEnding w celu zaimplementowania kodu, który anuluje zamknięcie aplikacji.

Jeśli chcesz pokazać i ukryć okno wiele razy w okresie istnienia aplikacji i nie chcesz ponownie przedstawiać okna za każdym razem, gdy zostanie ono wyświetlone, możesz obsłużyć Closing zdarzenie, anulować je i wywołać metodę Hide . Następnie możesz wywołać Show to samo wystąpienie, aby otworzyć je ponownie.

Dotyczy

Zobacz też