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;
}

 

posted @ 2013-05-10 11:40  小小夜  阅读(872)  评论(0编辑  收藏  举报