事件_窗体传值(使用系统自带的委托)
本实验的目的:利用系统自带的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>这个是带返回值方法的委托,,自己学习!!!
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号