练习:新建连个窗体,当点击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();
}
}
}
}