事件_窗体传值(使用系统自带的委托)

2020-03-24 14:43:43 浏览数 (1)

本实验的目的:利用系统自带的EventHandler 委托。模仿.netFrame系统的委托是如何实现功能的;

Form1的代码:

代码语言:javascript复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 事件_窗体传值_用系统自带委托_
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public event EventHandler evt; // 1、首先在这里声明一个系统委托的字段 ;
        private void button1_Click(object sender, EventArgs e)
        {
            //显示窗体2
            Form2 f2 = new Form2();
            this.evt  = new EventHandler(f2.SetTxt);//用来传递Form2中的方法f2.SetTxt;  //2、自己手动的添加new EventHandler
            ///这里是有错误的,因为参数不匹配,所以要写一个类MyEventArgs 来继承方法
            MyEventArgs mea = new MyEventArgs();       //6、实例化这个类。
            mea.Name = textBox1.Text;  //7、并对这个类赋值。。。就是将Form1中的文本框内容进行赋值
            if (this.evt != null)   //8、判断
            {
                this.evt(this, mea);//9、调用  //但是这里发现少一个参数 EventArgs  ----------------
                f2.Show();
            }
        }
    }
    public class MyEventArgs : EventArgs    //4、自己创建一个类。。继承的作用-------------------
    {
        public string Name { set; get; }  //5、用以传值  //记得加上关键字public
    }
}

Form2的代码:

代码语言:javascript复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace 事件_窗体传值_用系统自带委托_
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        //定义一个方法
        public void SetTxt(object sender, EventArgs e) //3、这里自己定义的方法也是要写上与系统对应的变量参数的                                  
        {
            MyEventArgs mes = e as MyEventArgs;         //这里的e其实就是已经从Form1中接收的文本了
            textBox1.Text = mes.Name;  //这里的mes里Name 属性就保存了Form1的信息了
        }
    }
}

总结:如果说是不在委托中写委托还有Action<int t> 泛型委托

和 Fun<int T1,int T2,int T3,······,out Result>这个是带返回值方法的委托,,自己学习!!!

0 人点赞