继承形式的初始化存在一个意想不到的问题。 我期望这可以工作:
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()
BaseForm.InitializeConstructor触发EndInit()
MyChildForm.EndInit()被调用....
...但是MyChildForm.InitializeComponent()尚未调用,所以我没有按钮!!
因此,我理解了问题所在,但是对于为什么做错了我感到困惑。 最后,我在InitializeComponent()之后将按钮调整放在MyChildForm构造函数中,此方法有效,但是我认为这是EndInit()的工作。
我的问题:
将按钮调整置于EndInit()内是否错误?
无法实现在继承的表单上实现的EndInit()吗?