代码之家  ›  专栏  ›  技术社区  ›  Greg

在窗体构造函数和窗体加载事件中应该使用什么设置代码?

  •  53
  • Greg  · 技术社区  · 15 年前

    对于WinForms应用程序,我想知道应该输入什么设置代码:

    • 主格式()

    而不是

    • 主窗体加载(对象发送器,事件参数e)

    这里有什么最佳实践指南吗?

    2 回复  |  直到 11 年前
        1
  •  71
  •   Hans Passant    12 年前

    使用了vb6的程序员倾向于在加载事件中放入大量代码,在vb6中,该事件用于初始化表单。但这在Windows窗体中不再适用,窗体类可以有一个构造函数。NET方法是在构造函数中初始化类对象,很少有令人信服的理由不为窗体类这样做。

    加载事件在窗体的窗口句柄创建之后运行,就在用户看到它之前运行。您应该只在依赖于创建句柄的事件处理程序中编写代码。除了一种代码:需要知道窗口大小和位置的代码外,没有符合此要求的代码负载。

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

    在执行初始化TreeView或ListView控件等操作的Load事件中编写代码实际上会大大缩短启动时间。在构造函数中进行此操作时,Windows窗体还不必更新物理窗口,它还没有被创建。创建本机控件后,WinForms会使用批量更新来初始化它,而不是像在加载事件中运行代码时那样一次更新一个节点/项。大的不同。

    最后但不是最不重要的:您不应该使用加载事件,您应该重写onload()方法。这可以确保当您(或其他人)从窗体类继承时,代码以可预测的顺序运行。IntelliSense帮助您编写此方法,只需键入“protected onl”,然后按Tab让IntelliSense自动完成此方法。注意,在base.onload()调用之前或之后,您可以选择如何放置代码,这就是控制谁是老板的方法。你是老板,当你把它放在后,往往不是正确的选择btw。

        2
  •  10
  •   Adriaan Stander    15 年前

    快看一眼 Use Constructor in Windows Forms to Ensure Proper Initialization

    在Windows窗体中使用构造函数 以确保初始化 做得好。事件触发命令为 不是一门精确的科学,你不能 始终取决于 不管你做什么,事件都会发生 以前见过。

    为此,微软 建议你处理 表单中的初始化代码 构造器,假设您没有 好好享受一下 可以获取的初始化 时间切片或执行doEvents()。