窗体代码:
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,转载请注明出处!讨论可扫码加群:



少有人走的路



















