Window.Closing 事件

定義

在呼叫 Close() 後立即發生,可以用來取消視窗關閉動作。

C#
public event System.ComponentModel.CancelEventHandler Closing;

事件類型

例外狀況

視窗要關閉時,設定了 Visibility 或是呼叫了 Show()ShowDialog()Close()

範例

下列範例示範 的 Window ,判斷是否需要使用者介入才能關閉。

XAML
<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>
C#
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;
                }
            }
        }
    }
}

備註

Closing 例如,當呼叫) 時,可以處理以偵測視窗關閉的時間 Close (。 此外, Closing 也可以用來防止視窗關閉。 若要防止視窗關閉,您可以將引數的 CancelEventArgs 屬性設定 Canceltrue

Closing如果 Close 按一下視窗的 [關閉] 按鈕,或使用者按下 ALT+F4,就會引發事件。

如果使用 的擁有者視窗 Show 開啟擁有視窗,且擁有者視窗已關閉,則不會引發擁有的視窗 Closing 事件。 如果視窗的擁有者 (看到 Owner) , Closing 則不會在擁有的視窗上引發。

如果 Shutdown 呼叫 , Closing 則會引發每個視窗的事件。 不過,如果 Closing 取消,則會忽略取消。

如果會話因為使用者登出或關閉而結束, Closing 則不會引發;處理 SessionEnding 以實作取消應用程式關閉的程式碼。

如果您想要在應用程式的存留期內多次顯示和隱藏視窗,而且您不想要在每次顯示視窗時重新設定視窗,您可以處理 Closing 事件、取消它,以及呼叫 Hide 方法。 然後,您可以在相同的實例上呼叫 Show ,以重新開啟它。

適用於

產品 版本
.NET Framework 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

另請參閱