2014-03-13 75 views
1

我对C#和GUI事件总的来说很新鲜。C#事件和继承

我有一个基类:

public partial class BaseClass : UserControl 
{ 
    private event DataChangeEventHandler mDataChangeEvent; 
    public event DataChangeEventHandler DataChange 
    { 
    add 
    { 
     mDataChangeEvent += value; 
    } 
    remove 
    { 
     mDataChangeEvent -= value; 
    } 
    } 
    } 

    public delegate void DataChangeEventHandler(object sender, EventArgs e); 

    ... 
    ... 

    protected virtual void Control1_SelectedValueChanged(object sender, EventArgs e) 
    { 
    //some code do something 
    if(mDataChangeEvent != null) 
    { 
     EventArgs e = new EventArgs(); 
     mDataChangeEvent(this, e); 
    } 
    } 
} 
// derived class 
public partial class DerivedClass : BaseClass 
{ 
... 
... 
    protected override void Control1_SelectedValueChanged(object sender, EventArgs e) 
    { 
    base.Control1_SelectedValueChanged(sender, e); 
    } 
} 

我跑我的代码通过调试。每当我将下拉控件更改为另一个值时,它将触发我的派生类'Control1_SelectedValueChanged'的中断点,然后调用基类'Control1_SelectedValueChanged'。但是,mDataChangeEvent为null。为什么?

+2

这意味着没有人正在收听该事件。您错过了订阅活动? –

+0

嗨Sriram,首先谢谢你。这就说得通了。我的派生类是否订阅了该事件或类CallingClass,它使用我的派生类,它是否由AnotherClass实例化,或者我的AnotherClass是否订阅了该事件?我希望有道理 – Allen

回答

1

使用此控件的表单必须具有该事件的处理程序。例如:

BaseClass baseClass = new BaseClass(); 
baseClass.DataChange += <EventHandlerHere>