来自自定义usercontrol中的类的C#事件永远不会触发

时间:2014-06-06 15:57:19

标签: c# winforms events

我有一个课程,每当有一个属性发生变化时,就会发生一个事件。

    public event EventHandler StructureChanged;
    protected virtual void NotifyStructureChanged(EventArgs e)
    {
        if (StructureChanged != null)
        {
            StructureChanged(this, e);
        }
    }

我在我的属性中的set语句中包含NotifyStructureChanged(new EventArgs());。 无论何时调用该方法,StructureChanged始终为空。我的类是自定义用户控件中的私有成员,类事件在usercontrol的构造函数中注册,如此

_pt.StructureChanged += _pt_StructureChanged;

并在此处理

    void _pt_StructureChanged(object sender, EventArgs e)
    {
        UpdateControl();
    }

到目前为止,我所拥有的是一个自定义类,其中的事件是自定义用户控件的私有成员。我在自定义usercontrol中注册了我的类事件。每当类属性发生更改时,我都会更新我的控件以反映类中的更改。

我在这里做错了什么?我的usercontrol上有一个按钮,我可以注册该事件,为什么我不能注册我的课程事件?

1 个答案:

答案 0 :(得分:0)

如果StructureChangednull而不是在事件被触发后附加事件处理程序(或者您正在某处拆分处理程序)。

也不要传递EventArgs - 它只是无用的虚拟参数。

public event EventHandler StructureChanged;

protected virtual void OnStructureChanged()
{
    if (StructureChanged != null)        
        StructureChanged(this, EventArgs.Empty);        
}

在setter中调用此方法:

public Foo Bar
{
    get { return _bar; }
    set {
       if (_bar == value)
          return;

       _bar = value;
       OnStructureChanged();
    }
}