Window.Closing Olay

Tanım

Çağrıldıktan hemen sonra Close() gerçekleşir ve pencere kapatma işlemini iptal etmek için işlenebilir.

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

Olay Türü

Özel durumlar

Visibility bir pencere kapatılırken ayarlanır Show()veya , ShowDialog()veya Close() çağrılır.

Örnekler

Aşağıdaki örnek, kapatmak için kullanıcı müdahalesi gerekip gerekmediğini belirleyen bir Window gösterir.

<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

Açıklamalar

Closing bir pencerenin ne zaman kapatıldığını algılamak için işlenebilir (örneğin, çağrıldığında Close ). Ayrıca, Closing bir pencerenin kapanmasını önlemek için de kullanılabilir. Pencerenin kapanmasını önlemek için bağımsız değişkeninin CancelCancelEventArgs özelliğini olarak trueayarlayabilirsiniz.

Olay Closing çağrıldığında Close , pencerenin Kapat düğmesine tıklandığında veya kullanıcı ALT+F4 tuşlarına bastığında tetiklenir.

Sahip olunan bir pencere sahip penceresi tarafından kullanılarak Showaçıldıysa ve sahip penceresi kapatılırsa, sahip olunan pencerenin Closing olayı tetiklenmez. Pencerenin sahibi kapalıysa (bkz Owner. ) Closing sahip olunan pencerede yükseltilmemiştir.

çağrılırsa Shutdown , Closing her pencere için olay oluşturulur. Ancak iptal edilirse Closing iptal yok sayılır.

Kullanıcı oturumu kapattığı veya kapattığı için oturumun sona ermesi durumunda Closing tetiklenmez; uygulama kapanışını iptal eden kodu uygulamak için işleyin SessionEnding .

Bir uygulamayı kullanım ömrü boyunca bir pencereyi birden çok kez göstermek ve gizlemek istiyorsanız ve pencereyi her gösterişinde yeniden göstermek istemiyorsanız, olayı işleyebilir Closing , iptal edebilir ve yöntemini çağırabilirsiniz Hide . Ardından, yeniden açmak için aynı örneği çağırabilirsiniz Show .

Şunlara uygulanır

Ayrıca bkz.