.net - Form_Load() 'event' 或覆盖 OnLoad()

标签 .net winforms events refactoring overriding

我希望有人尝试解释这些之间的区别。更具体地说,示例使用场景。

我正在重构一些 Windows 窗体 代码和 FormForm_Load() 中有一些代码事件,也在 protected override void OnLoad()调用 base.OnLoad(e); 的事件现在我跟踪了它,覆盖首先触发,然后立即触发事件版本。

那么,通常使用哪一种,为什么?

最佳答案

您应该始终覆盖 OnLoad()。仅当另一个类(class)对该事件感兴趣时才适合使用该事件。这是什么事件。另一个对 Load 事件感兴趣的类是非常罕见的,只对进行窗口排列很有用。

尽管如此,Load 事件对设计者来说效果很好,而且 VB6 程序员对它非常熟悉。这并没有大错,只有当您开始继承表单并且代码没有以正确的顺序运行时,您才会遇到麻烦。

现在放入 Load 事件中的大多数代码实际上都属于构造函数。在以下情况下,您只需要 OnLoad:

  • 您需要知道窗口的确切大小和位置。 OnLoad 最好,创建窗口句柄并应用用户首选项(标题和边框大小),并按照 Form.AutoScaleMode 属性的指示重新缩放表单。窗口尚不可见,这是将窗口移动到其他地方或安排子控件的好时机。
  • 您有需要 Handle 属性的代码。这是微妙的,你不能总是说出来。在构造函数中使用这样的代码是不健康的,窗口在构造函数完成之前被创建。它通常会有一个好的结局,但它会使创建表单非常缓慢。易于从“调用堆栈”窗口进行诊断。
  • 避免 MDI 实现中的错误。如果您在父构造函数中创建 MDI 子项,那么您将获得重复的字形,当您最大化子项时可见。而是在 OnLoad 中创建子项。
  • 关于.net - Form_Load() 'event' 或覆盖 OnLoad(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3670806/

    相关文章:

    c# - 全屏模式,但不要覆盖任务栏

    javascript - Android + jQuery - swipeleft 上的第二个不会执行

    Javascript removeEventListener 不工作

    c# - 如何以编程方式即时更改网站默认文档

    C# WinForms - Paint 方法问题

    c# - 如何每 N 分钟重置一个递增计数器

    c# - 如何在 C# 中覆盖 Form.Show() 方法

    node.js - Emit 和 on - Node JS 在函数内的单独模块中

    c# - 带有 Nullable 值的 SqlParameter 在 ExecuteNonQuery 时出错?

    c# - 更新记录在 LINQ to SQL 中不起作用