事件:事件就是将委托这个类型,包装成一个对象,用这个对象,注册需要触发的方法。
还是上篇博文里的例子,还是两个窗体之间的传值,Form设计如图:
From1点击按钮,把文本框的数据传到Form2,还是用构造函数传值的方式,代码:
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2(textBox1.Text);
f.Show();
}
Form2:构造函数:
public Form2(string s):this()
{
textBox1.Text = s;
}
由于Form2需要改变Form1中文本框的值,委托这么定义:
public delegate void Mydele(string sss);
Form1中定义改变文本框的方法:
void f_mdele(string str)
{
textBox1.Text = str;
}
那么问题来了:说好的事件呢?说好的传值呢?
在Form2中这么定义: 上面说过,事件是对象,要在类中定义,相当与一个变量。
public event Mydele mdele;
在Form2按钮点击事件中调用:
private void button1_Click(object sender, EventArgs e)
{
if (mdele!=null)
{
mdele(textBox1.Text);
}
}
这样Form2中的代码就写完了,Form1中怎么注册这个事件呢?用+= 改造Form1中按钮点击的事件:
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2(textBox1.Text);
f.mdele+=f_mdele;
f.Show();
}
运行一下,就完成了。