如何从派生形式返回基本形式?

时间:2017-08-01 14:39:09

标签: c# winforms inheritance

我的表单FormA继承自Form。我重写OnLoad如下:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    //Do FormA stuff here            
}

现在我从FormB派生出第二种形式FormA,以便我有相同的表单布局。但是我想覆盖OnLoad,但如果我这样做:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    //Do FormB stuff here        
    //without doing FormA stuff    
}

它会调用我不想要的FormA's OnLoad

在这种情况下,如何在Form Onload内调用FormB事件?

2 个答案:

答案 0 :(得分:1)

您无法使用此代码。例如,你不能说base.base.OnLoad

我想你想做这样的事情。

FORMA

protected sealed override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    MyOnLoad(e);
}

protected virtual void MyOnLoad(EventArgs e)
{
    // FormA onload
}

FormB

protected override void MyOnLoad(EventArgs e)
{
    // FormB onload
}

在此强制您始终致电Form.OnLoad,但您可以在OnLoad中更改每个派生类的MyOnLoad行为。

答案 1 :(得分:0)

您可以移除对base.OnLoad(e)的通话。但是,如果有任何操作控件的处理,比如数据绑定,我强烈建议不要这样做。

视觉继承没有多大用处,最好将常用功能重构为用户控件,并将其添加到两个表单中,而不是从另一个表单继承。