WinForms中的实例化顺序是什么

时间:2017-04-26 09:08:07

标签: c# winforms

我有一个表单,在其Load方法中,我根据表单构造函数中收到的参数列表设置了几个属性。
当我尝试在表单上的一个控件中使用其中一个表单的属性时,我得到以下错误:

  

对象引用未设置为对象的实例

所以我发现在该控件的Event方法中使用该表单的属性时,特定属性为null。
我认为表单的Load方法实际上是在实例化所有控件之后执行的,但是我不确定它并且在搜索网络时没有发现任何相关内容。

1 个答案:

答案 0 :(得分:1)

首先,调用表单构造函数。在其中,WHERE( (`day` = 1) -- Day is 1 AND ( -- starting time is between 5am to 6pm TIME(STR_TO_DATE(concat(time(`working_hour_from`),`Period_from`),'%h:%m:%s %p')) between '05:00:00' and '18:00:00' -- or finished between 5am to 6pm OR TIME(STR_TO_DATE(concat(time(`working_hour_to`),`period_to`),'%h:%m:%s %p')) between '05:00:00' and '18:00:00' ) ); 方法调用窗体上控件的所有构造函数(而这些控件又可以调用自己的其他构造函数)。首次显示表单时会触发InitializeComponent 事件,这会更晚。

因此,在正常情况下,您在Load事件处理程序中分配的字段在表单的构造函数或表单上的控件中可用。

如果需要设置需要子控件构造函数可访问的内容,则需要手动控制这些控件的生命周期(而不是使用设计器),或者需要先分配 调用Load方法。请注意,您不能在InitializeComponent之前使用任何控件,因为此时它们仍然是InitializeComponent