首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >事件_窗体传值(使用系统自带的委托)

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

作者头像
静心物语313
发布2020-03-24 14:43:43
5840
发布2020-03-24 14:43:43
举报

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

Form1的代码:

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的代码:

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>这个是带返回值方法的委托,,自己学习!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档