我的表单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
事件?
答案 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)
的通话。但是,如果有任何操作控件的处理,比如数据绑定,我强烈建议不要这样做。
视觉继承没有多大用处,最好将常用功能重构为用户控件,并将其添加到两个表单中,而不是从另一个表单继承。