Aracılığıyla paylaş


Window.Closing Olay

Tanım

Doğrudan çağrıldıktan sonra Close() gerçekleşir ve pencere kapanışını 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

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

Örnekler

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

<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 kullanılabilir. Pencerenin kapanmasını önlemek için bağımsız değişkeninin CancelCancelEventArgs özelliğini olarak trueayarlayabilirsiniz.

Bir Closing pencerenin Kapat düğmesine tıklandığında veya kullanıcı ALT+F4 tuşlarına bastığında olay çağrıldığında Close 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. Bir 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 yoksayılır.

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

Bir uygulamanın ömrü boyunca bir pencereyi birden çok kez göstermek ve gizlemek istiyorsanız ve pencereyi her gösteriliş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.