继承形式的初始化存在一个意想不到的问题。 我期望这可以工作:

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()吗?

===============>>#1 票数:0

当控件以某种形式初始化时,将多次调用EndInit 有时,调用EndInitEndInit尚未初始化的控件。 您可能正在寻找Loaded事件。

  ask by Brendan Hill translate from so

未解决问题?本站智能推荐: