要通过委托实现一个功能:不同窗体进行消息传递
思路:
1、首先创建两个窗体,功能简化,label,button,textbox,三个控件
B进行发送消息,A进行接受消息。
2、对按钮进行点击功能的添加,同时思考如何写委托
3、委托分为几步
第一步:委托的声明,如果还不确定有没有返回值,几个参数,先写一个大概的情况
第二步:委托对应的方法:放到你想调用的那个对象里面(从B里调用A的方法,想把消息传给A,所以放在A里面)
第三步:定义委托变量:谁想使用委托,就在哪里定义委托变量(B想发消息给A,但是也不能强制找人家,所以B想使用委托,托关系找A)
第四步:关联委托变量。在创建对象的地方关联。
passMsg,它的类型就是委托类型。
第五步:使用委托变量
彩蛋:小西(B)找小潘(A),但是互不认识(也不允许直接联系),小西通过小婆(委托)找小潘。
窗体A代码:
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;
using 委托;
namespace 委托
{
// 1、委托声明
public delegate void PassMsgDelegate(string msg);
public partial class A : Form
{
public A()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
B b = new B();
//4、关联委托变量,如果这个写在ShowDialog下面就会报错,没有接收到方法,值为空
//如果用的是show,那写在后面就不会报错
b.passMsg = ReceiveMsg;
b.ShowDialog();
}
//2、接受消息的方法
public void ReceiveMsg(string s)
{
textBox1.Text+= s;
}
}
}
窗体A代码:
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 B : Form
{
//3、创建委托变量
public PassMsgDelegate passMsg=null;
public B()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
//5、使用委托变量传值
passMsg(textBox1.Text.Trim());
}
}
}