dee*_*hao 5 events controls components onload-event winforms
有没有办法像System.Windows.Forms.Form.Load一样为System.Windows.Forms.Control获取Load事件?
我想在控件首次显示之前运行一些初始化代码.
另外,能够为System.Windows.Forms.ToolStripStatusLabel做同样的事情会很好,它实际上不是一个Control,但是就像一个.
理想情况下,我可以这样做:control.OnLoad(()=> {dosomething here;});
其中OnLoad是一个扩展方法,当"控制""加载"时将运行参数Action.
谢谢!
Form.Load
事件由属于该类OnLoad
的OnCreateControl
方法调用的方法调用Control
。因此,对于表单,调用顺序如下:
OnCreateControl start
OnLoad start
Form Load event call
OnLoad finish
OnCreateControl finish
Run Code Online (Sandbox Code Playgroud)
我想您可以覆盖OnCreateControl
您的组件并在其中添加优化代码。
希望这会有所帮助,问候。
对于控件,您可以覆盖OnControlCreated或OnHandleCreated.如果需要重新创建控制窗口,后者可以多次触发.如果您的代码影响窗口本身,请务必使用它.换句话说,如果您执行任何需要Handle属性的操作.
ToolStripItem派生控件的选择很少.我建议重写SetVisibleCore()或OnAvailableChanged()或AvailableChanged事件.它们在ToolStripItem的Visible属性发生更改时运行.请注意它可能会多次触发,保留一个跟踪初始化代码已经运行的bool字段.
最后但同样重要的是,如果您的代码实际上需要创建控件,请务必执行此操作.绝大多数init代码都可以放在构造函数中.如果您的代码取决于控件的实际位置和大小,则只需要Load事件.如果表单由于目标计算机上的不同系统字体或视频DPI设置而重新缩放,则可能与设计者值不同.