对于winforms应用程序,我想知道应该使用哪些设置代码:
而不是
这里有最佳实践指南吗?
答案 0 :(得分:72)
使用VB6的程序员倾向于在Load事件中放入大量代码,在VB6中该事件用于初始化表单。但是在Windows窗体中不再适用,Form类可以有一个构造函数。 .NET方法是在构造函数中初始化类对象,对于Form类,没有什么令人信服的理由不这样做。
在窗体创建窗口句柄之后立即运行Load事件,就在它对用户可见之前。您应该只在依赖于创建句柄的事件处理程序中编写代码。除了一种类型之外,没有一大堆符合此要求的代码:需要知道窗口大小和位置的代码。
当表单在另一台计算机上运行时,表单的设计时大小和位置属性值与它们的实际值不同。可以重新调整表单以适应目标计算机上的系统字体大小或视频适配器DPI设置。用户首选项也起作用,用户可能为窗口标题选择了不同的字体大小。除非您希望窗口在桌面上具有特定位置或与其他窗口对齐,否则您通常不关心这些内容。
在Load事件中编写代码,例如初始化TreeView或ListView控件,实际上可以大大减慢启动时间。在构造函数中执行此操作时,Windows窗体不必更新物理窗口,尚未创建它。一旦创建了本机控件,Winforms就会使用批量更新而不是一次一个节点/项来初始化它,就像代码在Load事件中运行时一样。差异很大。
最后但并非最不重要:您永远不应该使用Load事件,您应该覆盖OnLoad()方法。当您(或其他人)从Form类继承时,这可确保代码以可预测的顺序运行。 IntelliSense可帮助您编写此方法,只需键入“protected onl”并按Tab键即可使IntelliSense自动完成该方法。注意你可以选择在base.OnLoad()调用之前或之后放置代码,这就是你如何控制谁是老板。当你把它放在后面时,你就是老板,通常不是正确的选择。
答案 1 :(得分:10)
快速查看Use Constructor in Windows Forms to Ensure Proper Initialization
在Windows窗体中使用构造函数 确保初始化 做得好。事件解雇顺序是 不是一门精确的科学,你不能 总是取决于其中的顺序 无论你是什么,事件都会火上浇油 已经看过了。
....
出于这个原因,微软 建议你处理 Forms中的初始化代码 构造函数,假设你没有 有一个真正的时间消遣 初始化可以得到 时间切片或做DoEvents()。