0

我们在继承表单的初始化方面遇到了一个意想不到的问题。我期待这个工作:

public class MyChildForm : BaseForm
{

    public MyChildForm() {
        InitializeComponent();
    }
    public overrides void EndInit() {
        base.EndInit();

        //Do special tweaks to buttons on MyChildForm!
        DoYoAwesomeThang(myButton);
    }
}

但是它会崩溃,因为 MyChildForm 上的按钮尚未初始化。经过调查发现这是由于我们在实例化 MyChildForm 时发生的以下事件序列:

  1. BaseForm 构造函数调用

  2. BaseForm.InitializeConstructor() 调用

  3. BaseForm.InitializeConstructor 触发 EndInit()

  4. MyChildForm.EndInit() 被调用....

    ...但是 MyChildForm.InitializeComponent() 还没有调用所以我没有我的按钮!

所以我理解这个问题,但我对为什么我做错了感到困惑。最后,我在 InitializeComponent() 之后将按钮调整放在 MyChildForm 构造函数中,这很有效,但我认为这种事情是 EndInit() 的工作。

我的问题:

  1. 将按钮调整放在 EndInit() 中是错误的吗?

  2. 在继承的表单上实现 EndInit() 是不可能的吗?

4

1 回答 1

0

EndInit当控件在表单中初始化时,将被多次调用。有时,在调用时会存在尚未初始化的控件EndInit。可能,该Loaded事件是您正在寻找的。

于 2013-04-16T01:03:17.547 回答