窗体代码:
public partial class Form1 : Form { eventTest event1 = new eventTest(); public Form1() { InitializeComponent(); event1.disEvent += event1_disEvent; } void event1_disEvent(object sender, EventArgs e) { var d=e as mydata; this.textBox1.Text= (d.keyname + "," + d.keynum); } private void button1_Click(object sender, EventArgs e) { event1.start(); } }
eventTest类的代码: namespace test1 { public class eventTest { public event EventHandler disEvent; public void start() { disEvent(null, new mydata()); } } public class mydata:EventArgs { public int keynum = 2; public string keyname = "kkkk"; } }
效果如下:
再一个自定义代理类型的例子:
还是先上代码,分别是窗体与eventTest2类的代码。
public partial class Form1 : Form { eventTest event1 = new eventTest(); eventTest2 event2 = new eventTest2(); public Form1() { InitializeComponent(); event1.disEvent += event1_disEvent; event2.eventAct += event2_eventAct; } void event2_eventAct(TsendInfo<student> obj) { this.textBox2.Text = obj.data.Name + "," + obj.data.Age; } void event1_disEvent(object sender, EventArgs e) { var d=e as mydata; this.textBox1.Text= (d.keyname + "," + d.keynum); } private void button1_Click(object sender, EventArgs e) { event1.start(); event2.start(); } }
public class eventTest2 { public event Action<TsendInfo<student>> eventAct; public void start() { eventAct(new TsendInfo<student>(new student() { })); } } /// <summary> /// 定义数据类 /// </summary> public class student { public string Name { get { return "blue"; } } public int Age { get { return 25; } } } /// <summary> /// 定义泛型类TEventArgs /// </summary> /// <typeparam name="T"></typeparam> public class TsendInfo<T> : EventArgs { //注意类的名字TsendInfo,其中T不是必须的,只是一个约定 public TsendInfo(T t) { data = t; } public T data { get; set; } }
效果如下:
最后只传一个字符串,一次触发多个事件。
类eventTest3的代码:
public class eventTest3 { public event Action<string> myAct; public void start() { for (int i = 0; i < 10;i++ ) myAct("只传一个字符串: "+(i+1)); } }
效果如下:
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


