在继承表单上过早调用EndInit()
本文关键字:调用 EndInit 继承 表单 | 更新日期: 2023-09-27 18:09:27
在初始化继承表单时遇到了一个意想不到的问题。我希望这能起作用:
public class MyChildForm : BaseForm
{
public MyChildForm() {
InitializeComponent();
}
public overrides void EndInit() {
base.EndInit();
//Do special tweaks to buttons on MyChildForm!
DoYoAwesomeThang(myButton);
}
}
但是它崩溃了,因为MyChildForm上的按钮还没有初始化。经过调查发现,这是由于我们实例化MyChildForm时的以下事件顺序:
BaseForm构造函数调用
BaseForm.InitializeConstructor()称为
标识。InitializeConstructor触发EndInit()
MyChildForm.EndInit()被称为....
…但是MyChildForm.InitializeComponent()还没有调用,所以我没有我的按钮!!
所以我明白了这个问题,但是我很困惑为什么我做错了。最后,我把按钮调整在InitializeComponent()之后的MyChildForm构造函数中,这是有效的,但我认为这种事情是EndInit()的工作。
我的问题:
把按钮调整在EndInit()里面是错误的吗?
是不可能实现EndInit()上实现继承的形式?
EndInit
将在窗体中初始化控件时被多次调用。有时,在调用EndInit
时,会有尚未初始化的控件。可能,Loaded
事件是你正在寻找的。