为什么关闭表单会调用Window_Closing()方法?

时间:2014-04-23 13:40:47

标签: c#

我不知道为什么,但是当我在窗体上调用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();
        }
    }
}

2 个答案:

答案 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,所以如果事件是手动绑定的,那么它可能是基于名称绑定的。

但最有可能的是设计师。