委托————窗体之间传值练习------引出事件的概念
练习:新建连个窗体,当点击Form1窗体的“传过去”,文本内容就显示在了,第二个窗体中;当点击第二个窗体时候,值又返回到窗体1的文本框中!
窗体1的代码:
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(); } private void button1_Click(object sender, EventArgs e) { //1、显示第二个窗口 //2、问题:如何传递值? //3、去第二个窗体 Form2 fm = new Form2(txtGO.Text,Test);//8、接下来进行传值//将值传给form2 //12、将Test()方法传给窗体2(有错误,说明:窗体2中的委托没有完成!) fm.Show(); } //9、问题:如何将点击二窗体进行值的返回? //分析::使用委托。。对窗体1 创建一个方法Test()用来改变文本框的值,,这个方法,通过点击窗体2的按钮进行触发 public void Test(string names) { txtGO.Text = names; } //10、接下来,就要在Form2中进行Test()方法的委托 } }
窗体2的代码:
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 窗体传值 { //11、写委托 public delegate void TestDel(string name1); public partial class Form2 : Form { public Form2() { InitializeComponent(); } //4、这里使用的方法,不使用字段,属性,那种普通的写法, //5、在这里用一个构造函数,进行接收来自外类的值 //14、写字段 public TestDel _mdl; public Form2(string name,TestDel mdl) : this() { //6、利用属性赋值 //7、返回到窗体1, this.textBack.Text = name; this._mdl = mdl; } private void button1_Click(object sender, EventArgs e) { //mdl 发现无法调用mdl //13、需要对委托进行字段的赋值 // _mdl(textBack.Text);//15、将第二个窗体中的文本返回。。。。这里首先要对委托进行null 判断(重要!!!) if (_mdl!=null) { _mdl(textBack.Text); this.Close(); } } } }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号