窗体的关闭事件

对于关注对 Windows 窗体应用程序中引发的每个事件按次序进行处理的开发人员来说,事件引发的顺序特别重要。

当 Windows 窗体应用程序启动时,主窗体的启动事件按以下顺序引发

1、System.Windows.Forms.Control.HandleCreated   

在为控件创建句柄时发生

2、System.Windows.Forms.Control.BindingContextChanged   

当 BindingContext 属性的值更改时发生   

注:每个 Windows 窗体至少有一个 BindingContext 对象,详见MSDN

3、System.Windows.Forms.Form.Load   

在第一次显示窗体前发生

4、System.Windows.Forms.Control.VisibleChanged   

在 Visible 属性值更改时发生   

注:如果通过编程修改或用户交互更改 Visible 属性,则将引发此事件

5、System.Windows.Forms.Form.Activated   

当使用代码激活或用户激活窗体时发生

6、System.Windows.Forms.Form.Shown   

只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。

 

 

当应用程序关闭时,主窗体的关闭事件按以下顺序引发:

1、System.Windows.Forms.Form.Closing   

在关闭窗体时发生   

注意:在 .NET Framework 版本 2.0 中,Closing 事件已过时,应改用 FormClosing 事件。

2、System.Windows.Forms.Form.FormClosing   

在关闭窗体前发生,此时可以取消窗体的关闭。

3、System.Windows.Forms.Form.Closed   

关闭窗体后发生   

注意:在 .NET Framework 版本 2.0 中,Closed 事件已过时,应改用 FormClosed 事件。

4、System.Windows.Forms.Form.FormClosed   

关闭窗体后发生

5、System.Windows.Forms.Form.Deactivate   

当窗体失去焦点并不再是活动窗体时发生

注意:当调用 Application.Exit 方法以退出应用程序时,不引发 Form.Closed 和 Form.Closing 事件,但是会激发 Form.FormClosed 和 Form.FormClosing 事件。

FormClosing :

在窗体关闭时,FormClosing 事件发生。窗体关闭时,此事件会得到处理,从而释放与此窗体关联的所有资源。如果取消此事件,则该窗体保持打开状态。若要取消窗体的关闭操作,请将传递给事件处理程序的 FormClosingEventArgs 的 Cancel 属性设置为 true。

FormClosed:

在用户或 Application 类的 Close 方法或 Exit 方法关闭窗体后,会发生 FormClosed 事件。

若要防止窗体关闭,请处理 FormClosing 事件,并将传递给事件处理程序的 CancelEventArgs 的 Cancel 属性设置为 true。可以使用此事件执行一些任务,如释放窗体使用的资源,还可使用此事件保存输入窗体中的信息或更新其父窗体。 当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。通过在窗体的 FormClosing 事件的事件处理程序中设置 DialogResult 属性,可以在用户单击“关闭”按钮时重写分配给 DialogResult 属性的值。

如果窗体是多文档界面 (MDI) 父窗体,则在引发 MDI 父窗体的 FormClosing 事件之前将引发所有 MDI 子窗体的 FormClosing 事件。同样,在引发 MDI 父窗体的 FormClosed 事件之前,将引发所有 MDI 子窗体的 FormClosed 事件。取消 MDI 子窗体的 FormClosing 事件不能防止引发 MDI 父窗体的 FormClosing 事件。但是,取消该事件会将作为参数传递给父窗体的 FormClosingEventArgs 类的 Cancel 属性设置成 false。要强制关闭所有 MDI 父窗体和子窗体,请将 MDI 父窗体中的 Cancel 属性设置成 false。

 

 

窗体显示为无模式对话框时,在close之后,此窗体的资源已释放,不能再调用show方法使窗体可见。

窗体显示为有模式对话框时,单击 关闭 按钮 (" X " 的按钮在窗体的右上角) 会隐藏窗体并且DialogResult 属性将设置为 DialogResult.Cancel 当用户单击该对话框的关闭的窗体按钮或设置 DialogResult 属性的值时,  .NET framework调用Close 方法窗体会隐藏并可重新显示,而不必创建对话框的新实例。 由于作为对话框中显示的窗体隐藏而未关闭,当窗体由应用程序时不再需要必须调用该窗体的 Dispose 方法。

在以下两种情况下调用 Close 不会释放窗体:(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;(2)该窗体是模式对话框。 在这些情况下,需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。

posted on 2012-04-10 14:34  ※WYF※  阅读(2461)  评论(0编辑  收藏  举报