【C#】使用委托实现窗体传值

引言

    机房重构的时候实现窗体传值,百度了很多方法都没有成功实现,于是想到了学习设计模式的时候用过的委托。下面小编就来简单的介绍一下委托,以及如何用委托实现窗体间的传值

什么是委托

    我一直在思考如何解释委托,才能把委托解释的更加透彻。因为看问题的角度不同,每个人对委托都有不同的见解。个人认为可以从以下2点来理解:

   (1)从数据结构来讲,委托和类一样是一种用户自定义类型

   (2)从设计模式来讲,委托提供了方法的抽象

    我们知道,委托是方法的抽象,它存储的就是一系列具有相同签名和返回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行

委托类型声明

    委托是类型,与类一样委托类型必须在被用来创建变脸以及类型对象之前声明

   (1)以deleagate关键字开头

   (2)返回类型+委托类型名+参数列表

委托与方法的区别

   
    //委托
    Public delegate void BugTicketEventHandler();

    //方法
    public void BuyTicket()
    {
        方法体
    }

    在现实生活中,委托只是一个命令,做事情的是别人,而在程序世界中委托只是存储了各个方法的地址,而它自己也是什么也不做的

使用委托实现窗体传值

    首先建一个winform窗体,如下图

【C#】使用委托实现窗体传值_第1张图片

    具体代码如下:

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

    }

    然后再建一个窗体,如下图

【C#】使用委托实现窗体传值_第2张图片

    代码如下:

   
    //声明委托
    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());
        }

    }

    最后实现的效果图,如下:

【C#】使用委托实现窗体传值_第3张图片



你可能感兴趣的:(-----C#)