为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
杨__羊羊 2019-11-28 10:56:06
对于winforms应用程序,我想知道应该使用什么安装代码:MainForm()相对于MainForm_Load(对象发送者,EventArgs e)这里有最佳实践指南吗?
查看完整描述

2 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

使用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()调用之前或之后,这就是您控制谁是老板的方式。当您把它放在首位后,您就是老板,但通常并没有正确的选择。


查看完整回答
反对 回复 2019-11-28
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

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

在Windows窗体中使用构造函数,以确保正确完成了初始化。事件触发顺序并不是一门精确的科学,无论您过去看到什么,您都不能始终依赖于事件触发的顺序。

....

因此,Microsoft建议您在Forms构造函数中处理初始化代码,假设您没有真正耗时的初始化,而该初始化可能会进行时间分割或执行DoEvents()。


查看完整回答
反对 回复 2019-11-28
  • 2 回答
  • 0 关注
  • 435 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信