一尘不染

表单构造函数与表单加载事件中应使用哪些设置代码?

c#

对于winforms应用程序,我想知道应该使用什么安装代码:

  • MainForm()

相对于

  • MainForm_Load(对象发送者,EventArgs e)

这里有最佳实践指南吗?


阅读 179

收藏
2020-05-19

共1个答案

一尘不染

使用VB6的程序员倾向于在Load事件中放入很多代码,在VB6中,该事件用于初始化表单。但这在Windows窗体中不再合适,Form类可以具有构造函数。.NET的方法是在构造函数中初始化类对象,对于Form类,很少有理由不这样做。

Load事件在创建窗体的窗口句柄之后,就在用户可见之前立即运行。您仅应在事件处理程序中编写依赖于已创建句柄的代码。除了一种以外,没有多少代码可以满足此要求:需要知道窗口大小和位置的代码。

当窗体在另一台计算机上运行时,窗体的设计时“大小”和“位置”属性值与它们的实际值不同。表单可以重新缩放以适应目标计算机上的系统字体大小或视频适配器DPI设置。用户首选项也起作用,用户可能为窗口标题选择了不同的字体大小。除非您希望窗口在桌面上具有特定位置或与其他窗口对齐,否则您通常不会在乎这些。

在Load事件中编写代码(执行诸如初始化TreeView或ListView控件之类的操作)实际上会大大减慢启动时间。在构造函数中执行此操作时,Windows
Forms不必更新物理窗口,但尚未创建。创建本机控件后,Winforms会使用批量更新而不是一次加载一个节点/项来对其进行初始化,就像在Load事件中运行代码时那样。很大的区别。

最后但并非最不重要的一点:永远不要使用Load事件,而应重写OnLoad()方法。当您(或其他人)从Form类继承时,这可确保代码以可预测的顺序运行。IntelliSense可帮助您编写此方法,只需键入“
protected
onl”并按Tab键即可让IntelliSense自动完成该方法。请注意,您如何选择将代码放在base.OnLoad()调用之前或之后,这就是您控制谁是老板的方式。当您把它放在首位后,您就是老板,但通常并没有正确的选择。

2020-05-19