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 属性设置为 。Canceltrue
Closing调用 时Close、单击窗口的“关闭”按钮或用户按 Alt+F4 时,将引发 该事件。
如果拥有的窗口由其所有者窗口使用 Show打开,并且所有者窗口已关闭,则不会引发拥有窗口的 Closing 事件。 如果关闭窗口的所有者 (看到 Owner) , Closing 则 不会在拥有的窗口上引发 。
如果 Shutdown 调用 ,则会 Closing 引发每个窗口的 事件。 但是,如果 Closing 已取消,则忽略取消。
如果会话因用户注销或关闭而结束, Closing 则 不会引发 ;句柄 SessionEnding 来实现取消应用程序关闭的代码。
如果要在应用程序的生存期内多次显示和隐藏窗口,并且不希望每次显示窗口时都重新实例化该窗口,可以处理 Closing 事件、取消该事件并调用 Hide 方法。 然后,可以在同一实例上调用 Show 以重新打开它。