我们在继承表单的初始化方面遇到了一个意想不到的问题。我期待这个工作:
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() 是不可能的吗?