引言
机房重构的时候实现窗体传值,百度了很多方法都没有成功实现,于是想到了学习设计模式的时候用过的委托。下面小编就来简单的介绍一下委托,以及如何用委托实现窗体间的传值
什么是委托
我一直在思考如何解释委托,才能把委托解释的更加透彻。因为看问题的角度不同,每个人对委托都有不同的见解。个人认为可以从以下2点来理解:
(1)从数据结构来讲,委托和类一样是一种用户自定义类型
(2)从设计模式来讲,委托提供了方法的抽象
我们知道,委托是方法的抽象,它存储的就是一系列具有相同签名和返回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行
委托类型声明
委托是类型,与类一样委托类型必须在被用来创建变脸以及类型对象之前声明
(1)以deleagate关键字开头
(2)返回类型+委托类型名+参数列表
委托与方法的区别
//委托
Public delegate void BugTicketEventHandler();
//方法
public void BuyTicket()
{
方法体
}
在现实生活中,委托只是一个命令,做事情的是别人,而在程序世界中委托只是存储了各个方法的地址,而它自己也是什么也不做的
使用委托实现窗体传值
首先建一个winform窗体,如下图
具体代码如下:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2(ShowText);
frm2.Show();
}
//Form2传送过来的数据 赋值给label
void ShowText(string str)
{
label1.Text = str;
}
}
然后再建一个窗体,如下图
代码如下:
//声明委托
public delegate void DelTest(string str);
public partial class Form2 : Form
{
private DelTest _del;// 存储Form1传送过来的函数
public Form2(DelTest del)
{
this._del = del;
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
this._del(textBox1.Text.Trim());
}
}
最后实现的效果图,如下: