我有一个继承自基本表单的表单。 baseform_loadchildform_load事件中都有代码。

BaseForm看起来像这样:

public partial class BaseForm : Form
{
    public BaseForm()
    {
        InitializeComponent();
    }

    private void BaseForm_Load(object sender, EventArgs e)
    {
        //Do stuff...
    }
}


子表单可能如下所示:

public partial class ChildForm : BaseForm
{
    public ChildForm ()
    {
        InitializeComponent();
    }

    private void ChildForm _Load(object sender, EventArgs e)
    {
        //Do stuff...
    }
}


baseform的load事件未显式加载。事件处理程序也可以使用,因为它们是通过表单设计器创建的。

我使用以下方法打开表单:

public static DialogResult ShowForm<T>(this Form form, bool canShowForm) where T : Form, new()
{
    return new T().ShowDialog(form);
}


一切工作正常,但是突然之间,都没有调用baseformchildform加载事件中的代码。

注意:我正在InitializeComponent构造函数中调用childform,它不会引发任何异常。

怎么了

最佳答案

我猜事件处理程序没有被订阅(由于覆盖了基类的InitializeComponents)。将此添加到构造函数中:

this.Load += BaseForm_Load;


专家提示:您可能想研究覆盖的Form.OnLoad。如果这样做,它将自动在派生类上调用OnLoad,因此不需要事件订阅。

就像是:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e); // let the base class do it's OnLoad

    //Do your own stuff...
}

10-05 18:37