窗体的关闭事件
FormClosed:在用户或Application类的Close方法或Exit方法关闭窗体后,会发生FormClosed事件。
若要防止窗体关闭,请处理FormClosing事件,并将传递给事件处理程序的CancelEventArgs的Cancel属性设置为true。可以使用此事件执行一些任务,如释放窗体使用的资源,还可使用此事件保存输入窗体中的信息或更新其父窗体。当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带X的按钮)会隐藏窗体并将DialogResult属性设置为DialogResult.Cancel。通过在窗体的FormClosing事件的事件处理程序中设置DialogResult属性,可以在用户单击“关闭”按钮时重写分配给DialogResult属性的值。
private void ShowForm()
{
this.Show();
this.WindowState = FormWindowState.Normal;
this.ShowInTaskbar = true;
this.Activate();
}
/// <summary>
//பைடு நூலகம்隐藏窗口
/// </summary>
/// <param name="e"></param>
private void notifyIcon1_Click(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Normal)
{
this.WindowState = FormWindowState.Minimized; HiddenForm();
当应用程序关闭时,主窗体的关闭事件按以下顺序引发:
1、System.Windows.Forms.Form.Closing在关闭窗体时发生。注意:在.NET Framework版本2.0中,Closing事件已过时,应改用
FormClosing事件。
2、System.Windows.Forms.Form.FormClosing在关闭窗体前发生,此时可以取消窗体的关闭。
对象,详见MSDN。
3、System.Windows.Forms.Form.Load在第一次显示窗体前发生。
4、System.Windows.Forms.Control.VisibleChanged在Visible属性值更改时发生。注:如果通过编程修改或用户交互更改Visible属性,则将引发此事件。
如果窗体是多文档界面(MDI)父窗体,则在引发MDI父窗体的FormClosing事件之前将引发所有MDI子窗体的FormClosing事件。同样,在引发MDI父窗体的FormClosed事件之前,将引发所有MDI子窗体的FormClosed事件。取消MDI子窗体的FormClosing事件不能防止引发MDI父窗体的FormClosing事件。但是,取消该事件会将作为参数传递给父窗体的FormClosingEventArgs类的Cancel属性设置成false。要强制关闭所有MDI父窗体和子窗体,请将MDI父窗体中的Cancel属性设置成false。
注意:当调用Application.Exit方法以退出应用程序时,不引发Form.Closed和Form.Closing事件,但是会激发Form.FormClosed和Form.FormClosing事件。
FormClosing:在窗体关闭时,FormClosing事件发生。窗体关闭时,此事件会得到处理,从而释放与此窗体关联的所有资源。如果取消此事件,则该窗体保持打开状态。若要取消窗体的关闭操作,请将传递给事件处理程序的FormClosingEventArgs的Cancel属性设置为true。
窗体的关闭事件
对于关注对Windows窗体应用程序中引发的每个事件按次序进行处理的开发人员来说,事件引发的顺序特别重要。
当Windows窗体应用程序启动时,主窗体的启动事件按以下顺序引发
1、System.Windows.Forms.Control.HandleCreated在为控件创建句柄时发生。
2、System.Windows.Forms.Control.BindingContextChanged当BindingContext属性的值更改时发生。注:每个Windows窗体至少有一个BindingContext
3、System.Windows.Forms.Form.Closed关闭窗体后发生。注意:在.NET Framework版本2.0中,Closed事件已过时,应改用
FormClosed事件。
4、System.Windows.Forms.Form.FormClosed关闭窗体后发生。
5、System.Windows.Forms.Form.Deactivate当窗体失去焦点并不再是活动窗体时发生。
private void HiddenForm()
{
this.Hide();
}
窗体显示为无模式对话框时,在close之后,此窗体的资源已释放,不能再调用show方法使窗体可见。
窗体显示为有模式对话框时,单击关闭按钮(" X "的按钮在窗体的右上角)会隐藏窗体并且DialogResult属性将设置为DialogResult.Cancel。当用户单击该对话框的关闭的窗体按钮或设置DialogResult属性的值时,.NET framework不调用Close方法,该窗体会隐藏并可重新显示,而不必创建对话框的新实例。由于作为对话框中显示的窗体隐藏而未关闭,当窗体由应用程序时不再需要,必须调用该窗体的Dispose方法。
}
else if (this.WindowState == FormWindowState.Minimized)
{
ShowForm();
}
}
private void FrmMain_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)//最小化
在以下两种情况下调用Close不会释放窗体:(1)窗体是多文档界面(MDI)应用程序的一部分且是不可见的;(2)该窗体是模式对话框。在这些情况下,需要手动调用Dispose来将窗体的所有控件都标记为需要进行垃圾回收。
/// <summary>
///最小化到托盘程序
/// </summary>
/// <param name="sender"></param>
5、System.Windows.Forms.Form.Activated当使用代码激活或用户激活窗体时发生。
6、System.Windows.Forms.Form.Shown只有在首次显示窗体时才会引发Shown事件;随后执行的最小化、最大化、还原、隐藏、显
示或无效化和重新绘制操作都不会引发该事件。
{
HiddenForm();
}
}
private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
HiddenForm();
}
/// <summary>
///显示窗口
/// </summary>