我希望有人尝试解释这些之间的区别。更具体地说,示例使用场景。
我正在重构一些 Windows表单代码,而Form
在Form_Load()
事件中以及调用{{1}的protected override void OnLoad()
事件中都有一些代码现在我跟踪它,Override首先触发,然后立即触发事件版本。
那么,通常使用哪一个?为什么?
答案 0 :(得分:25)
您应该始终覆盖OnLoad()。只有当另一个类对该事件感兴趣时,才能使用该事件。这是什么事件。另一个对Load事件感兴趣的类是非常罕见的,只对窗口排列的东西非常有用。
仍然,Load事件适用于设计人员,VB6程序员对此非常熟悉。这不是非常错误,当你开始继承表单并且代码没有以正确的顺序运行时,你只会遇到麻烦。
现在大多数放在Load事件中的代码都属于构造函数。如果出现以下情况,您只需要OnLoad:
答案 1 :(得分:2)
覆盖OnLoad
时,对base.OnLoad
的调用会调用表单的Load
- 事件。
protected override void OnLoad(EventArgs e)
{
// do stuff before Load-event is raised
base.OnLoad(e);
// do stuff after Load-event was raised
}
如果在引发Load事件之前没有特别需要执行内容,则在 OnLoad
之后将代码放在base.OnLoad(e)
中会产生与放置相同的运行时行为它在Form_Load
事件处理程序中。
我建议覆盖该方法而不是订阅该事件。
答案 2 :(得分:0)
OnLoad
引发加载事件,Form_Load
处理该事件。请参阅MSDN article。
因此,在您的代码中,在初始化函数结束时,您可以调用OnLoad
函数。然后,基类将调用您的事件处理程序(在这种情况下为Form_Load
),您可能已在初始化代码中设置了该事件处理程序。
就我个人而言,我会将我的代码放在Form_Init
并离开OnLoad
以启动此事件,因为我正在处理此事件,尽管您可以有充分理由进行辩护,如您所见你的答案。