Window.Closing Händelse

Definition

Inträffar direkt efter Close() anropas och kan hanteras för att avbryta stängning av fönster.

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

Händelsetyp

Undantag

Visibility anges, eller Show(), ShowDialog()eller Close() anropas när ett fönster stängs.

Exempel

I följande exempel visas en Window som avgör om användaren måste ingripa för att stängas.

<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

Kommentarer

Closing kan hanteras för att identifiera när ett fönster stängs (till exempel när Close anropas). Dessutom Closing kan användas för att förhindra att ett fönster stängs. Om du vill förhindra att ett fönster stängs kan du ange Cancel egenskapen för CancelEventArgs argumentet till true.

Händelsen Closing utlöses när Close anropas, om knappen Stäng i ett fönster klickas eller om användaren trycker på ALT+F4.

Om ett ägt fönster öppnades av dess ägarfönster med hjälp av Show, och ägarfönstret är stängt, utlöses inte det ägda fönstrets Closing händelse. Om ägaren till ett fönster är stängd (se Owner), Closing aktiveras inte i det ägda fönstret.

Om Shutdown anropas Closing utlöses händelsen för varje fönster. Om Closing avbryts ignoreras dock annulleringen.

Om en session avslutas på grund av att en användare loggar ut eller stängs av, Closing aktiveras inte; hantera SessionEnding för att implementera kod som avbryter programstängningen.

Om du vill visa och dölja ett fönster flera gånger under programmets livslängd och inte vill återställa fönstret varje gång du visar det, kan du hantera händelsen, avbryta den Closing och anropa Hide metoden. Sedan kan du anropa Show samma instans för att öppna den igen.

Gäller för

Se även