很多人可能在前期开发窗体运用程序时,对窗体事件执行顺序都存在一些不明确的认识。在此,我个人总结一下自己的经验认识,如若存在误解的,欢迎指出讨论。
通常,我们观察窗体加载时,我们也可以看出一些规律。比如一个窗体内容很多的窗体,我们会看到,窗体的边框会最先出现,但是里面的内容还在加载,如果说对控件有绑定值的操作,那种效果就会更加明显。这时,我们可能就会有先让窗体加载出来,再让他在慢慢的加载一些隐藏数据的想法。。。
带着一些疑问,我们一起来看一下我接下来要说的内容吧。
对于一个窗体程序,第一步,我们都知道,一定是执行Form()构造函数(含有InitializeComponent()方法的那个函数),初始化窗体,控件等内容,待内容初始完备后,将窗体Show()出来。
这里需要注意的是,弹出窗体,我们有Show()和ShowDialog()两个方法可以用,通常情况下,我们一般都用Show()这个方法。其实具体要用哪一个方法,还是需要结合我们具体的需求。我们来看看Show()和ShowDialog()两个方法的主要区别在哪,最主要体现是后一个展示的窗体是独占的,如果打开了对应的窗体,不将其关掉,它便会独占主线程,使得不能在对系统的其他功能做操作,而前一个则不会有这样的影响。
或许这时有人会以为 Show()方法执行之后,接下来应该是执行Shown()方法。这里要注意了,在Show()方法之后,主线程是会继续执行Load()事件,通常我们对窗体的初始化赋值,一般都是写在这个事件里面的,但是也有人会写在构造函数里。不过个人建议一下,对应一些控件层级的操作(给一个控件添加一个默认控件)等操作,可以写在构造函数里,其他的变量赋值等之类的操作,尽量都写在Load()事件里吧。
Load()事件执行完成后,接下来便是执行Shown()方法,不过在窗体程序的编写中,很少用到这一个方法,可做一个了解,说不定哪天遇到某个需求,就需要用到这个方法才能有效的解决。值得注意的是,SizeChanged() 事件第一次触发,通常发生在 Load() 事件之后、Shown() 事件之前的某个时间点。所以触发Shown()与触发SizeChange()事件都是在Load()事件之后,但是不同的是,在主动改变窗体大小时,也会触发SizeChange()事件。
而在窗体加载至完成,还有一个非常重要的一个事件,Activated()事件,通常发生在:
- 窗体首次启动完成并显示时。
- 用户从其他应用程序或本应用程序的其他窗口点击切换回该窗体时。
- 最小化后恢复窗体时。
Activated() 事件用途:
- 刷新数据:当用户切换回窗体时,自动刷新显示内容(例如,重新从数据库拉取最新数据)。
- 启动/恢复动画。
- 记录日志(用于跟踪用户在哪个窗口工作)。

本文详细阐述了窗体程序从构造函数初始化到显示过程中的事件执行顺序,包括Form构造函数、Show与ShowDialog的区别、Load事件及Shown事件的触发时机,并介绍了如何优化窗体加载速度。
736





