4

在 Windows 窗体中,当用户控件或窗体第一次变得可见时,会触发 Load 事件。

http://msdn.microsoft.com/en-us/library/system.windows.forms.usercontrol.load.aspx

Checkbox、TextBox、Label 等控件是否有此类事件?

4

1 回答 1

5

不可以。您可以使用 HandleCreated 事件,它在创建控件的本机窗口时触发。在类构造函数运行之后,您可以依赖运行的第一个事件。当父控件将控件添加到其 Controls 集合并且控件变为可见时,将触发它。

但是请注意,此事件可能会多次触发。当某些属性被重新分配时,控件可能会被重新创建,这种类型需要使用新的样式标志调用本机 CreateWindowEx() 函数。因此,您至少需要携带一个布尔标志来跟踪这一点。

另请注意,在创建本机窗口设置控件的属性非常低效。所有 Winforms 控件都设计为允许在创建本机窗口之前设置属性。无论您生成什么代码,几乎肯定都应该使用类构造函数。派生控件本身。或者在父代码中,就像 InitializeComponent() 对表单或用户控件所做的那样。

现有的 Load 事件也是如此。由于加载事件非常重要的 VB6 遗留系统,它往往被过度使用。然而,在 Winforms 中,只有取决于控件或窗体的最终位置和大小的代码才需要它。由于形状缩放,这可能与设计属性不同。任何其他代码都属于构造函数。

于 2012-11-05T15:11:39.977 回答