Window.Closing 事件
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在呼叫 Close() 後立即發生,可以用來取消視窗關閉動作。
public:
event System::ComponentModel::CancelEventHandler ^ Closing;
public event System.ComponentModel.CancelEventHandler Closing;
member this.Closing : System.ComponentModel.CancelEventHandler
Public Custom Event Closing As CancelEventHandler
事件類型
例外狀況
視窗要關閉時,設定了 Visibility 或是呼叫了 Show()、ShowDialog() 或 Close()。
範例
下列範例示範 的 Window ,判斷是否需要使用者介入才能關閉。
<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
備註
Closing 例如,當呼叫) 時,可以處理以偵測視窗關閉的時間 Close (。 此外, Closing 也可以用來防止視窗關閉。 若要防止視窗關閉,您可以將引數的 CancelEventArgs 屬性設定 Cancel 為 true
。
Closing如果 Close 按一下視窗的 [關閉] 按鈕,或使用者按下 ALT+F4,就會引發事件。
如果使用 的擁有者視窗 Show 開啟擁有視窗,且擁有者視窗已關閉,則不會引發擁有的視窗 Closing 事件。 如果視窗的擁有者 (看到 Owner) , Closing 則不會在擁有的視窗上引發。
如果 Shutdown 呼叫 , Closing 則會引發每個視窗的事件。 不過,如果 Closing 取消,則會忽略取消。
如果會話因為使用者登出或關閉而結束, Closing 則不會引發;處理 SessionEnding 以實作取消應用程式關閉的程式碼。
如果您想要在應用程式的存留期內多次顯示和隱藏視窗,而且您不想要在每次顯示視窗時重新設定視窗,您可以處理 Closing 事件、取消它,以及呼叫 Hide 方法。 然後,您可以在相同的實例上呼叫 Show ,以重新開啟它。