Load like event in Windows Forms for any control like textbox, checkbox?

心不动则不痛 提交于 2021-02-05 05:44:06

问题


In Windows Forms when a UserControl or Form first time becomes visible the Load event is fired.

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

Is there any such event for controls like Checkbox, TextBox, Label ?


回答1:


No. You could use the HandleCreated event, it is fired when the native window for the control is created. The first event you can rely on to run after the class constructor ran. It is triggered when the parent adds the control to its Controls collection and the control becomes visible.

Beware however that it this event can fire more than once. Controls may be re-created when certain properties get reassigned, the kind that requires the native CreateWindowEx() function to be called with new style flags. So you'll at least need to carry around a bool flag that keeps track of this.

Also note that setting properties of a control after the native window is created is pretty inefficient. All Winforms controls were designed to allow properties to be set before the native window is created. Whatever code you are generating almost surely should use the class constructor instead. Either of the derived control itself. Or in the code of the parent, much like InitializeComponent() does for a form or user-control.

The same is true for the existing Load event. It tends to be over-used due to the VB6 legacy where the Load event was very important. In Winforms however it is only required for code that depends on the final location and size of a control or form. Which may be different from the design properties due to form scaling. Any other code belongs in the constructor.



来源:https://stackoverflow.com/questions/13233253/load-like-event-in-windows-forms-for-any-control-like-textbox-checkbox

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!