C# WinForms中的实例化顺序是什么

C# WinForms中的实例化顺序是什么,c#,winforms,C#,Winforms,我有一个表单,在它的Load方法中,我根据在表单构造函数中收到的参数列表设置了几个属性。 当我试图在窗体的一个控件中使用这些窗体的属性时,我遇到了以下错误: 对象引用未设置为对象的实例 因此,我发现在控件的事件方法中使用该窗体的属性时,特定属性为null。 这让我想到表单的Load方法实际上是在所有控件实例化之后执行的,但我不确定,在搜索网络时也没有找到任何相关的内容。首先,调用表单构造函数。在其中,InitializeComponent方法调用窗体上控件的所有构造函数,而这些控件又可以调用自己

我有一个表单,在它的Load方法中,我根据在表单构造函数中收到的参数列表设置了几个属性。 当我试图在窗体的一个控件中使用这些窗体的属性时,我遇到了以下错误:

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

因此,我发现在控件的事件方法中使用该窗体的属性时,特定属性为null。
这让我想到表单的Load方法实际上是在所有控件实例化之后执行的,但我不确定,在搜索网络时也没有找到任何相关的内容。

首先,调用表单构造函数。在其中,InitializeComponent方法调用窗体上控件的所有构造函数,而这些控件又可以调用自己的其他构造函数。加载事件在窗体第一次显示时触发,这要晚得多

因此,在正常情况下,在加载事件处理程序中指定的字段在窗体的构造函数或窗体上的控件中不可用


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

显示代码您是否将代码放在InitializeComponent之前;?-请发布您的代码。可能您有另一个构造函数没有执行InitializeComponent;。请提供更多信息,代码也可能更有用检查所示的&=>使用以确保所有内容都已正确安装。这就解释了这一点。谢谢。@ZedMcJack注意,这里面没有魔法。如果找到对加载事件处理程序的所有引用,您将看到,即使是在InitializeComponent处理程序中实际分配的引用。load的调用有点隐藏,因为它与整个窗口系统在Windows上的工作方式有很大关系,但可以说它取决于窗口消息循环,它在代码运行时不会运行,而是在应用程序中运行;对于非主窗体,直到导致创建它们的事件返回。