0

我声明订阅事件:

public class MainClass
{
    public void btndel_bar_Click(object sender, RoutedEventArgs e)
    {
        SomeClass sc = new SomeClass();
        sc.FieldUpdate += new SomeClass.FieldUpdateHandler(sc_FieldUpdate);
    }

    void sc_FieldUpdate(object sender, ValueEventArgs e)
    {
        MessageBox.Show(e.Smth_property);
    }
}

这是我想听的事件:

public class Someclass
{
    public delegate void FieldUpdateHandler(object sender, ValueEventArgs e);
    public event FieldUpdateHandler FieldUpdate;

    void Somemethod()
    {
        string str = "Steel";
        ValueEventArgs args = new ValueEventArgs(str);
        FieldUpdate(this, args);   
    }
}

携带数据的类:

public class ValueEventArgs : EventArgs
{
    private string smth;

    public ValueEventArgs(string smth)
    {
        this.smth = smth;
    }

    public string Smth_property
    {
        get { return smth; }
    }
}

我总是有FieldUpdate=null。如何解决?

4

3 回答 3

3

Somemethod()在调用代码有机会添加事件处理程序之前,您正在调用构造函数。
因此,该事件仍然为空。

于 2013-09-01T11:45:09.723 回答
0

您创建事件对象的那一刻SomeClass将被重新初始化。

使您的事件成为静态的,以便 SomeClass 的多个对象共享它

public static event FieldUpdateHandler FieldUpdate;
于 2013-09-01T12:00:23.180 回答
0

我读过关于委托和事件的文章,读完后我一直想重新进行所有操作。我又做了一遍,它起作用了!因此,我在开始时做错了什么。

于 2013-09-02T12:00:41.680 回答