界面主窗体,子窗体的InitializeComponent(构造函数)、Load事件执行顺序

主窗体,子窗体的InitializeComponent(构造函数)、Load事件执行顺序
1、执行主窗体定义事件 new函数时,同时执行主窗体构造函数,默认就一个InitializeComponent函数,该函数中有各子窗体的new创建语句,因此
2、执行主窗体定义new()函数时,如 FrmXXX = new FrmXXX(),同时执行了FrmXXX.cs中的public FrmXXX() 及其内部的InitializeComponent();因而触发所有子窗体的InitializeComponent()函数
3、主窗体new事件结束后,并不创建任何窗体或子窗体,直到主窗体Show事件发生,主窗体、子窗体的Load()事件都不会发生
4、主窗体Show事件后,顺序执行各子窗体Load事件,最后才执行主窗体Load事件
结论:主窗体的InitializeComponent事件早于子窗体InitializeComponent事件发生,但子窗体Load事件早于主窗体Load事件发生。
推论:
1、子窗体selechanged等事件在子窗体的Load事件中可能触发,此时主窗体Load事件尚未执行,可能会有空值情况出现
2、等到主窗体Load事件执行时,往往会给子窗体赋值,又可能会触发子窗体selecange事件发生,注意是否会有空值出现
3、主窗体Load事件中为DV、Grid等窗体绑定数据源时,也会触发这些控件的selecanged事件,以至其它关联控件的selechagne事件发生,注意是否有空值出现
4、对窗体位置、大小调整语句只能写在Show事件之后才发挥作用
5、new()对应InitializeComponent;Show()对应Load

原文地址:https://www.cnblogs.com/mol1995/p/8004661.html