我在以下地址宣布订阅活动:
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
。怎么解决?
答案 0 :(得分:3)
在调用代码有机会添加事件处理程序之前,您在构造函数中调用Somemethod()
。
因此,该事件仍为空。
答案 1 :(得分:0)
您创建SomeClass
对象时,您的活动将重新初始化。
使您的事件成为静态,以便SomeClass的多个对象可以共享它
public static event FieldUpdateHandler FieldUpdate;
答案 2 :(得分:0)
我读过有关代表和活动的文章,阅读后我总是想再次进行所有操作。我重新做了一遍,它的确有效!因此,当我在开头做的时候,我做错了。