我不知道为什么,但是当我在窗体上调用close()方法时,它会自动调用Window_Closing()方法,但为什么呢?
我跟踪了代码,实际上它会自动调用它,但我不确定。
相关的代码片段(来自一本名为Visual C#2010的逐步说明书):
namespace BellRingers
{
public partial class MainWindow : Window
{
private string[] towers = { "Great Shevington", "Little Mudford",
"Upper Gumtree", "Downley Hatch" };
private string[] ringingMethods = { "Plain Bob", "Reverse Canterbury",
"Grandsire", "Stedman", "Kent Treble Bob", "Old Oxford Delight",
"Winchendon Place", "Norwich Surprise", "Crayford Little Court"};
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
MessageBoxResult key = MessageBox.Show("Are you sure you want to quit",
"Confirm",
MessageBoxButton.YesNo,
MessageBoxImage.Question,
MessageBoxResult.No);
e.Cancel = (key == MessageBoxResult.No);
}
private void exit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
}
答案 0 :(得分:1)
那就是Closing的用途。只要在表单上调用Closing
方法,框架就会引发Close()
事件。
以下来自MSDN的片段解释了何时引发Closing以及何时没有。
来自MSDN:
可以处理关闭以检测窗口何时关闭(例如,当调用Close时)。此外,Closing可用于防止窗口关闭。要防止窗口关闭,可以将CancelEventArgs参数的Cancel属性设置为true。
调用Close时,如果单击窗口的关闭按钮,或者用户按下ALT + F4,则会引发Closing事件。
如果所有者窗口由其所有者窗口使用Show打开,并且所有者窗口关闭,则不会引发拥有窗口的Closing事件。如果窗口的所有者已关闭(请参阅所有者),则不会在拥有的窗口上显示关闭。
如果调用Shutdown,则会引发每个窗口的Closing事件。但是,如果取消关闭,则忽略取消。
如果会话因用户注销或关闭而结束,则不会引发关闭;处理SessionEnding以实现取消应用程序关闭的代码。
如果要在应用程序的生命周期内多次显示和隐藏窗口,并且每次显示时都不想重新实例化窗口,则可以处理关闭事件,取消它,以及调用Hide方法。然后,您可以在同一个实例上调用Show以重新打开它。
答案 1 :(得分:0)
嗯,这就是Closing活动的重点。如果您正在谈论将方法分配给相关事件的布线,那么通常是在表单设计器中。虽然我知道事件可以通过名称自动绑定在例如ASP.NET,所以如果事件是手动绑定的,那么它可能是基于名称绑定的。
但最有可能的是设计师。