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

 

转载于:https://www.cnblogs.com/juefeiye/archive/2013/05/10/eventmy123.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值