偶编写一个类,在这个类中,有一个Control类型的属性,可设置为用户的一个文本框或组合框等
现在想做的功能是:在这个Control触发Validating事件之前,先执行我的程序,而且还可以决定是否继续执行Validating事件
那么,其实就重写Control的OnValidating方法就行了,但关键问题是,我的类不能继承该Control,这个Control只是我类中的一个属性罢了 怎么办??问题总结为:不继承一个类,如何重写一个类的方法?
现在想做的功能是:在这个Control触发Validating事件之前,先执行我的程序,而且还可以决定是否继续执行Validating事件
那么,其实就重写Control的OnValidating方法就行了,但关键问题是,我的类不能继承该Control,这个Control只是我类中的一个属性罢了 怎么办??问题总结为:不继承一个类,如何重写一个类的方法?
2、不把Control做为一个属性,而做为一个UserControl不行吗?
public Control Control
{
get
{ return _yourControl;
}
set
{
_yourControl.Validating+=new System.ComponentModel.CancelEventHandler(_yourControl_Validating);
_yourControl=value;
} } private void _yourControl_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{ }
所以,在 +=之前先要保存一下以前的委托链,然后可以自己决定是否继续调用
--------------------------------------------------------------------------
但我想到的是
1. 我的订阅要优先执行
2. 我的订阅可以取消后续的Validating事件除了重写OnValidating方法,好像没什么别的方法了,但现在我的程序又不可能继承控件
private void Control_Validating(object sender, CancelEventArgs e)
{
e.Cancel=true;
}
就可以取消后续的Validating,这个是在Validate发生之前触发的
public abstract class DecoratorControl : Control
{
protected ControlBase ActualControl;
public DecoratorControl(Control c)
{
this.ActualControl = c;
}
public override void OnValidate()
{
if (ActualControl != null)
ActualControl.OnValidate();
}
}然后再在此类上生成一个实体类(你需要扩展的功能)
再将此实体类作为你的类的一个变量。