什么设置代码应该在窗体构造与窗体加载事件?

对于winforms应用程序,我想知道什么设置代码应该在:

  • MainForm的()

而不是

  • MainForm_Load(对象发件人,EventArgs e)

这里有没有最佳实践指导方针?

使用VB6的程序员倾向于在Load事件中放置大量代码,在VB6中,事件被用来初始化表单。 但是这在Windows窗体中不再合适,Form类可以有一个构造函数。 .NET的方法是在构造函数中初始化类对象,但是很less有令人信服的理由不这样做Form类。

Load事件在窗体的窗口句柄创build之后立即运行,就在用户可见之前。 你只能在事件处理程序中编写代码,这取决于创build的句柄。 除了一种代码之外,没有一种符合此要求的代码负载:需要知道窗口大小和位置的代码。

窗体在另一台机器上运行时,窗体的devise时大小和位置属性值与其实际值不同。 可以重新调整表格以适应目标机器上的系统字体大小或video适配器DPI设置。 用户首选项也起作用,用户可能已经为窗口标题select了不同的字体大小。 除非您希望窗口在桌面上具有特定位置或与其他窗口alignment,否则通常不关心这些。

在Load事件中编写代码来执行初始化TreeView或ListView控件,实际上可以显着减慢启动时间。 当您在构造函数中执行此操作时,Windows窗体不必更新物理窗口,它尚未创build。 一旦创build了本地控件,Winforms就会使用批量更新对其进行初始化,而不是一次一个节点/项目,就像代码在Load事件中运行时那样。 巨大差距。

最后但并非最不重要的:你不应该使用Load事件,你应该重写OnLoad()方法。 这可确保代码在您(或其他人)从您的Form类inheritance时以可预测的顺序运行。 智能感知可以帮助您编写此方法,只需键入“protected onl”,然后按Tab键让IntelliSense自动完成该方法。 注意如何在base.OnLoad()调用之前或之后select放置代码,这就是如何控制谁是老板。 当你把它放在后面时,你是老板,而不是经常正确的select顺便说一句。

快速查看Windows窗体中的使用构造函数以确保正确的初始化

使用Windows窗体中的构造函数来确保正确完成初始化。 事件的发射顺序并不是一门精确的科学,不pipe你以前看过什么事情,你都不能总是依赖于事件发生的顺序。

….

由于这个原因,微软build议你在Forms构造函数中处理初始化代码,假设你没有一个真正耗时的初始化,可以得到时间片或者做一个DoEvents()。