vs.net2002中窗口类继承问题(50分)

  • 主题发起人 主题发起人 xiangqian
  • 开始时间 开始时间
X

xiangqian

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI中我们经常使用窗口继承来简化开发,
但当我用VS.NET2002继承窗口时,发现他不能象DELPHI那样在继承类事件中以inherited
关键字标识,而时根本找不到基类定义好的事件。另外继承的窗口类中的控件也不允许
双击进入事件编写过程。
请问各位大侠我如何在继承类中重载基类事件过程。
 
c#中的窗口继承和delphi的窗口继承其实非常类似,事件处理也非常类似。
不同的是
delphi窗口中的控件是FORM类的publish成员。(以至于我现在想把它变为private的都无能为力)。
它们是特殊的类成员,其属性在dfm中描述,并由FORM自动初始化它们。
而,c#中,所有的控件默认为FORM的private成员,它是类的普通成员,它们的属性和初始化
代码都在cs文件中。
可通过Modifier属性来修改为public,这样就可以和delphi一样了。
》但当我用VS.NET2002继承窗口时,发现他不能象DELPHI那样在继承类事件中以inherited
》关键字标识,而时根本找不到基类定义好的事件。
在c#中,ms规定了一种定义事件的标准。
就是这样
class Form
{
...
public event EventHandler Load;
protected void virtual OnLoad(EventArgs e)
{
...
}
}
所有控件的事件都是这么定义的。这种方式就是你可以很简单很清晰的override父类的事件
public ChildForm:Form
{
...
protected override void OnLoad(EventAgrs e)
{
...
base.OnLoad(e);
//相当于inherited
}
}

》继承的窗口类中的控件也不允许双击进入事件编写过程。
原因就是,控件在父亲中是private的,连孩子也无权访问。

其实c#在事件处理什么没什么要炫耀的地方,基本上就和DELPHI是一样的。
只是它的delegate比TNotifyEvent高明一点,它可以同时指向多个方法。
 
写全吧,这个标准基本上是个定式
class Form
{
...
public event EventHandler Load;
protected void virtual OnLoad(EventArgs e)
{
if(Load!=null)
{
Load(this,e);
}
}

}
 
接受答案了.
 
后退
顶部