与构造函数方法相比,应该如何使用Form.Load事件?

时间:2010-07-07 22:48:32

标签: c# .net winforms

初始化控件的属性或与Form有关的其他值时,我倾向于在Form的构造函数中初始化值之间来回切换,然后在引发Form.Load事件时来回切换。

Forms构造函数与它的Form.Load事件的普遍接受用法是什么?对于其他类,我会在构造函数中进行所有初始化。然而,在VS中双击一个Form时,它会跳转到Form.Load事件的事件处理程序而不是构造函数。这使我相信在Load事件而不是构造函数之后进行所有初始化是更可取的。

3 个答案:

答案 0 :(得分:8)

是的,它有点令人伤心,它的工作原理是这样的。它在当时很有意义,现在已经10年了。 Windows Forms的目标是取代当时占主导地位的点击式UI设计器VB6。而且,在VB6中,Form_Load是 important ,这是您自定义表单视图的地方。

从一开始就不太合适,Form类有一个真正的构造函数。并且您可以在创建实际本机Window控件之前在构造函数中设置控件属性。 WF中有大量代码可以完成这项工作。设计人员依赖的代码,它在 Load事件触发之前设置这些属性。这样做非常有效,许多控件在创建窗口后需要更新时会慢一点 lot 。像ListView和TreeView一样。

没有理由不像设计者那样自己使用构造函数,特别是因为C#IDE不会试图隐藏构造函数。除了一个:当您编写需要了解实际表单大小的代码时,您需要 Load事件。在实际创建窗口之前,该大小是未知的,Load事件是最早的。这应该是罕见的。

当然,如果你想要使用Load,那么你重写OnLoad而不是使用Load事件。那将是另一个。

答案 1 :(得分:2)

当您双击设计器中的任何控件(包括表单)时,您将跳转到该控件的最常见事件处理程序。这并不意味着在那里做任何事情都是可取的 - 只是有人认为它是最有可能的事件处理程序。

表单的Load事件通常在创建所有控件后发生。构造函数事先发生。根据您实施的逻辑,在一种方法或另一种方法中处理某些操作可能是有益的。例如,初始化许多值最好在构造函数中完成:如果值影响表单的布局或内容,您可能会发现正在创建一个“浪费”的控件层次结构,当您更改值时,该层次结构会重建。将初始化放在构造函数中可能会让表单第一次正确构建自己 - 这样性能更高,可以避免一些错误。

最终,这两种方法都有其用途 - 看看你的代码在做什么,并选择合适的方法。

答案 2 :(得分:1)

我总是使用构造函数,几乎从不使用form.Load事件,除非我不能没有。原因是因为构造函数可以在Load事件不能真正接收时接收参数。

它更有用