Window.Closing Událost

Definice

Vyskytuje se přímo po Close() zavolání a je možné ho vyřešit tak, aby se zavření okna zrušilo.

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

Event Type

Výjimky

Visibility je nastaveno nebo Show(), ShowDialog()nebo Close() se volá, když se okno zavírá.

Příklady

Následující příklad ukazuje Window , který určuje, zda je nutné zásah uživatele zavřít.

<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

Poznámky

Closing lze zjistit, kdy je okno zavřené (například kdy Close je volána). Kromě toho Closing lze použít k zabránění zavření okna. Pokud chcete zabránit zavření okna, můžete vlastnost argumentu CancelCancelEventArgs nastavit na true.

Událost Closing se vyvolá při Close zavolání, kliknutí na tlačítko Zavřít v okně nebo při stisknutí kombinace kláves ALT+F4.

Pokud vlastní okno otevřelo okno vlastníka pomocí Showa okno vlastníka je zavřené, událost vlastněného okna Closing se nevyvolá. Pokud je vlastník okna zavřený (viz Owner), Closing není ve vlastněném okně vyvolána.

Pokud Shutdown je volána, vyvolá se Closing událost pro každé okno. Pokud Closing se ale zruší, zrušení se ignoruje.

Pokud relace skončí, protože se uživatel odhlásí nebo vypne, není vyvolána; Closing rutina SessionEnding implementuje kód, který zruší uzavření aplikace.

Pokud chcete okno zobrazit a skrýt několikrát během životnosti aplikace a nechcete okno znovu nastavit pokaždé, když ho zobrazíte, můžete událost zpracovat Closing , zrušit ji a volat metodu Hide . Pak můžete zavolat Show na stejnou instanci a znovu ji otevřít.

Platí pro

Viz také