如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
C#窗体关闭时可以触发的事件用户关闭软件时,软件一般会给“是否确认关闭”的提示。通常,我们把它写在FormClosing事件中,如果确定关闭,就关闭;否则把FormClosingEventArgs的Cancel属性设置为true,就取消了该窗体的关闭。如果该窗体是主窗体,我们想在该窗体关闭时关闭整个应用程序,会遇到至少两种情况:(1)该窗体同时是启动窗体,即它是应用程序中所有窗体的父类,则整个应用程序会被关闭。(2)如果该窗体不是启动窗体,比如我们做了一个欢迎窗体,则应用程序中所有窗体的父类就是这个欢迎窗体了。这时该窗体的关闭并不会关闭整个应用程序。我们需要再加入“Application.Exit()”这行代码来退出应用程序。但同时又有问题了,父窗体的关闭又会给该窗体发送关闭事件,于是该事件又被调用一次,确认对话框又会弹出第二次。解决方法是用下面的代码:注:做欢迎体界面可以在主窗体中,ShowDialog方法打开欢迎界面,而不是把欢迎界面作为启动窗体。下面的方法仅有理论意义。protectedoverridevoidWndProc(refMessagem){//Console.WriteLine(m.Msg);constintWM_SYSCOMMAND=0x0112;constintSC_CLOSE=0xF060;if(m.Msg==WM_SYSCOMMAND&&(int)m.WParam==SC_CLOSE){//捕捉关闭窗体消息//用户点击关闭窗体控制按钮注释为最小化窗体//this.WindowState=FormWindowState.Minimized;//窗体隐藏this.Hide();return;}base.WndProc(refm);}FormClosing:在窗体关闭时,FormClosing事件发生。窗体关闭时,此事件会得到处理,从而释放与此窗体关联的所有资源。如果取消此事件,则该窗体保持打开状态。若要取消窗体的关闭操作,请将传递给事件处理程序的FormClosingEventArgs的Cancel属性设置为true。FormClosed:在用户或Application类的Close方法或Exit方法关闭窗体后,会发生FormClosed事件。若要防止窗体关闭,请处理FormClosing事件,并将传递给事件处理程序的CancelEventArgs的Cancel属性设置为true。可以使用此事件执行一些任务,如释放窗体使用的资源,还可使用此事件保存输入窗体中的信息或更新其父窗体。当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带X的按钮)会隐藏窗体并将DialogResult属性设置为DialogResult.Cancel。通过在窗体的FormClosing事件的事件处理程序中设置DialogResult属性,可以在用户单击“关闭”按钮时重写分配给DialogResult属性的值。注意在显示为无模式窗口的Form上调用Close方法时,不能调用Show方法使窗体可见,因为窗体的资源已被释放。若要隐藏窗体然后又使其可见,请使用Hide方法。如果窗体是多文档界面(MDI)父窗体,则在引发MDI父窗体的FormClosing事件之前将引发所有MDI子窗体的FormClosing事件。同样,在引发MDI父窗体的FormClosed事件之前,将引发所有MDI子窗体的FormClosed事件。取消MDI子窗体的FormClosing事件不能防止引发MDI父窗体的FormClosing事件。但是,取消该事件会将作为参数传递给父窗体的FormClosingEventArgs类的Cancel属性设置成false。要强制关闭所有MDI父窗体和子窗体,请将MDI父窗体中的Cancel属性设置成false。privatevoidForm2_FormClosing(objectsender,FormClosingEventArgse){DialogResultresult=MessageBox.Show("你确定要关闭吗!","提示信息",MessageBoxButtons.OKCancel,MessageBoxIcon.Information);if(result==DialogResult.OK){e.Cancel=false;//点击OK}else{e.Cancel=true;}}