本实验的目的:利用系统自带的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>这个是带返回值方法的委托,,自己学习!!!