WinForms Form_Load未调用

Iva*_*ono 2 .net c# event-handling winforms

我有一个从基本形式继承的表单.在baseform_load和childform_load事件中都有代码.

BaseForm看起来像这样:

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

    private void BaseForm_Load(object sender, EventArgs e)
    {
        //Do stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)

并且子表单可能如下所示:

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

    private void ChildForm _Load(object sender, EventArgs e)
    {
        //Do stuff...
    }
}
Run Code Online (Sandbox Code Playgroud)

在baseformLoad事件没有被明确载入.事件处理程序也可用,因为它们是通过表单设计器创建的.

我用以下方法打开表单:

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

一切都工作正常,但突然之间,既不在代码baseform,也不childform加载事件被调用.

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

这有什么不对?

Pat*_*man 5

我想事件处理程序没有订阅(由于覆盖了基类' InitializeComponents).将其添加到构造函数:

this.Load += BaseForm_Load;
Run Code Online (Sandbox Code Playgroud)

专业提示:您可能希望查看覆盖Form.OnLoad.如果这样做,它会OnLoad自动调用派生类,因此不需要事件订阅.

就像是:

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

    //Do your own stuff...
}
Run Code Online (Sandbox Code Playgroud)