C# 事件 委托 传值
1 定义事件
public class UserMsgEvent : EventArgs
{
private string _myName;
public string MyName
{
get { return _myName; }
set { _myName = value; }
}
public UserMsgEvent(string name)
{
_myName = name;
}
}
2 哪个方法需要传递事件发生的(一般继承至EventAgr类)参数,
A:就在那个类里发布 且调用事件
private event EventHandler<UserMsgEvent> userMsgEvent;
protected void Button1_Click(object sender, EventArgs e)
{
string s = TextBox1.Text;
UserMsgEvent msg = new UserMsgEvent(s);
userMsgEvent(this, msg);
}
B:在调用之前应该把订阅者的方法传递进来初始化
public void addEvent(EventHandler<UserMsgEvent> msgEvent)
{
if (userMsgEvent == null)
{
userMsgEvent = new EventHandler<UserMsgEvent>(msgEvent);
}
else
{
userMsgEvent += msgEvent;
}
}
C:如过不把方法传递进来初始化那么必须把事件 以及事件调用 定义成static
例如:
public class DataListener
{
private static DataListener _datalistener;
public static DataListener Datalistener
{
get {
if (_datalistener == null)
{
_datalistener = new DataListener();
}
return DataListener._datalistener;
}
}
//定义委托
public delegate void DataListenHander();
//定义事件
public event DataListenHander DataListenEvent;
//定义监听方法
public void onDataListen()
{
if (DataListenEvent != null)
{
DataListenEvent();
}
}
}
或者例如这样:
public delegate void MyDelegate(string s);
public event MyDelegate Myevent;
public static MyClass myEventClass = new MyClass();
public void TestMyEvent(string s)
{
if (Myevent != null)
{
Myevent(s);
}
}
3 事件订阅者 订阅
MyClass.myEventClass.Myevent += new MyClass.MyDelegate(cl_Myevent);
void cl_Myevent(string s)
{
textBox1.Text = s;
}