必须记录一下,写winform窗体的时候多复制了一行代码,错把InitializeComponent()写在窗体的加载事件,然后几乎所有的事件都出不了效果了!!!检查的时候觉得
InitializeComponent()的Initial和窗体加载好像是一样的,应该没有错误就没有注意。但实际,窗体的加载时间和窗体的构造方法是不一样的!
构造函数:将构造一个对象,但这个对象不会显示到界面上来。
load():使用load前提是这个对象已经存在,load只是把这个对象要显示到显示的信息显示出来。
窗体启动时触发的事件和顺序
对于一个窗体程序,第一步,执行From构造函数,初始化窗体、控件等。待窗体初始化完成后,将窗体Show()出来。show窗体有Show()和ShowDialog(),后一个展示的窗体是独占的,如果打开了对应的窗体,不将其关掉,它便会独占主线程,使得不能在对系统的其他功能做操作,而前一个便不会有这样的影响。
show方法执行之后,主线程继续执行==Load()==窗体加载事件,通常对窗体的赋值,都是写在Load()里面。
Load()方法结束后,执行Shown方法。
Shown:只有在首次显示窗体时才会引发 Shown 事件;随后执行的最小化、最大化、还原、隐藏、显示或无效化和重新绘制操作都不会引发该事件。但是再new一个会触发!
而在窗体加载至完成,还有一个非常重要的一个事件,Activated()事件,
它是在窗体激活时或产生操作(包括鼠标点击)时发生。在窗体主线程执行完成会触发此事件,所以,在这里面的操作,是不会对窗体的加载造成影响的,所以加快窗体的加载速度,可以在这个事件上面动文章。不过如果想不到这个的事件,想要不影响窗体加载,提高窗体加载速度,可以利用线程等来实现。其原理都是让主线程快速执行完成,这样窗体就不会停留在假死的状态。
窗体启动时触发的事件和顺序
当应用程序关闭时,会以下列顺序引发主要表单的关闭事件:
System.Windows.Forms.Form.Closing
System.Windows.Forms.Form.FormClosing
System.Windows.Forms.Form.Closed
System.Windows.Forms.Form.FormClosed
System.Windows.Forms.Form.Deactivate
、