偶编写一个类,在这个类中,有一个Control类型的属性,可设置为用户的一个文本框或组合框等
    现在想做的功能是:在这个Control触发Validating事件之前,先执行我的程序,而且还可以决定是否继续执行Validating事件
 
    那么,其实就重写Control的OnValidating方法就行了,但关键问题是,我的类不能继承该Control,这个Control只是我类中的一个属性罢了   怎么办??问题总结为:不继承一个类,如何重写一个类的方法?

解决方案 »

  1.   

    把Control类组合到你的类中不行?
      

  2.   

    重写你的Control, 再把它丢到你的类中
      

  3.   

    思路有问题1、不重写不行吗?
    2、不把Control做为一个属性,而做为一个UserControl不行吗?
      

  4.   

    用自定义Control,在这里面写自己的验证方法OnValidating1,执行完后在执行OnValidating
      

  5.   

    为这个Control成员的Validating事件添加一个自定义的委托方法例如this.textBox1.Validating+=new CancelEventHandler(textBox1_Validating)
      

  6.   

    Control既然是一个属性,那就做一个Control的子类,作为你的属性
      

  7.   

    看起来怎么有点象 adadatapter模式啊
      

  8.   

    很难改变思路其实要做的是用户随便传一个或几个控件给我的类,我的类能自动响应这些控件的Validating事件来验证数据。那么不可能继承的
      

  9.   

    private Control _yourControl;
    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)
    { }
      

  10.   

    明白LZ的意思,看看我的代码,Control就是你想要的属性,_yourControl_Validating方法就是你想要的方法
      

  11.   

    同义lovejxl(CapTsubasa) 的做法,补充一下,搂主要求可以决定是否继续执行Validating事件
    所以,在 +=之前先要保存一下以前的委托链,然后可以自己决定是否继续调用
      

  12.   

    明白LZ的意思,看看我的代码,Control就是你想要的属性,_yourControl_Validating方法就是你想要的方法
    --------------------------------------------------------------------------
    但我想到的是
    1. 我的订阅要优先执行
    2. 我的订阅可以取消后续的Validating事件除了重写OnValidating方法,好像没什么别的方法了,但现在我的程序又不可能继承控件
      

  13.   

    这个就没错的,
    private void Control_Validating(object sender, CancelEventArgs e)
    {
    e.Cancel=true;
    }
    就可以取消后续的Validating,这个是在Validate发生之前触发的
      

  14.   

    实际上这是一个典型的Decorator模式应用。
        public abstract class DecoratorControl : Control
        {
            protected ControlBase ActualControl;
            public DecoratorControl(Control c)
            {
                this.ActualControl = c;
            }
            public override void OnValidate()
            {
                if (ActualControl != null)
                    ActualControl.OnValidate();
            }
        }然后再在此类上生成一个实体类(你需要扩展的功能)
        再将此实体类作为你的类的一个变量。
      

  15.   

    ASP.NET专家讨论群:30417196,限工作人士