Form_Load()'event'或Override OnLoad()

Ref*_*din 25 .net events refactoring overriding winforms

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

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

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

Han*_*ant 26

您应该始终覆盖OnLoad().只有当另一个类对该事件感兴趣时才使用该事件.这是什么事件.另一个对Load事件感兴趣的类是非常罕见的,只对窗口排列的东西非常有用.

仍然,Load事件适用于设计人员,VB6程序员对此非常熟悉.这不是非常错误,当你开始继承表单并且代码没有以正确的顺序运行时,你只会遇到麻烦.

现在放在Load事件中的大多数代码都属于构造函数.如果出现以下情况,您只需要OnLoad:

  • 您需要知道窗口的确切大小和位置.OnLoad是最好的,创建窗口句柄并应用用户首选项(标题和边框大小),并根据Form.AutoScaleMode属性的指示重新调整表单.窗口尚未可见,是将窗口移动到其他位置或安排子控件的好时机.
  • 您有需要Handle属性的代码.这很微妙,你不能总是说出来.在构造函数中使用类似代码是不健康的,窗口在构造函数完成之前创建.它通常会达到一个良好的目的,但它可以使形式非常慢.易于从"调用堆栈"窗口进行诊断.
  • 避免MDI实现中的错误.如果您在父构造函数中创建MDI子项,那么您将获得重复的字形,在您最大化子项时可见.而是在OnLoad中创建子项.