Form1_Load和OnLoad的区别:基类中的OnLoad函数会引发事件调用Form1_Load。如果你重写OnLoad函数(不调用base.OnLoad(e);而是
定义
自己在程序加载时的操作),那么基类中引发事件的代码就不会被
执行
,也就是说Form1_Load将不会被执行。
其他几个对应的函数同理。
1. 首先看程序启动的顺序:
1 - Form1 Constructor 2 - OnLoad 3 - Form1_Load 4 - OnActivated 5 - Form1_Activated
我们可以知道程序启动按照“构造函数 - Load - Activated”的顺序进行。
2. 再看当点击'X'号后的退出顺序:
1 - Form1 Constructor 2 - OnLoad 3 - Form1_Load 4 - OnActivated 5 - Form1_Activated 6 - OnDeactivate 7 - Form1_Deactivate
可以得到点击'X'号的退出顺序为"Deactivate",但是却没有进入OnClosing和OnClosed中,由此我们也就明白了为什么在最初点击'X'号后程序并不退出的原因了。那么,该怎么处理呢,很简单,由于在点'X'号后程序进入Deactivate,因此,我们在OnDeactivate或Form1_Deactivate中调用this.close()就能进入到OnClosing和OnClosed中了,然后在OnClosing和OnClosed中做一些退出处理,就是这样!
3. 点击'ok'后的退出顺序
1 - Form1 Constructor 2 - OnLoad 3 - Form1_Load 4 - OnActivated 5 - Form1_Activated 6 - OnClosing 7 - Form1_Closing 8 - OnClosed 9 - Form1_Closed 10 - OnDeactivate 11 - Form1_Deactivate
呵呵,果然如此,点击'ok'后果然比点击'X'后多了OnClosing和OnClosed的处理。