C#delegate(委托)实现主窗体与子窗体数据交互
|
admin
2025年3月17日 14:39
本文热度 1045
|
1、声明委托,要放在类的外面,在主窗体还是子窗体声明都可以;
2、根据委托编写具体方法(在调用的类中写);
3、创建委托变量(谁使用谁创建,即发送方);
4、关联具体方法(委托变量和具体方法关联)(在调用的类中紧跟着对象的类写);
左边是第3步delegate声明的委托变量,右边是第2步编写的方法
5、使用委托变量调用关联的方法(在哪里使用,在哪里写,即和委托变量在一个类中)。
即用第3步的委托变量替换第2步的方法名称,并传递具体参数
主窗体向子窗体发送消息
1、声明委托,要放在类的外面,在主窗体还是子窗体声明都可以;
2、编写具体方法;
3、创建委托变量(那里使用那里定义);
4、关联具体方法(委托变量和具体方法关联)(在调用的类中紧跟着对象的类写);
左边是第3步delegate声明的委托变量,右边是第2步编写的方法
5、使用委托变量调用关联的方法。
即用第3步的委托变量替换第2步的方法名称,并传递具体参数
namespace _003_基于Delegate实现窗体间信息交互
{
public partial class FrmChild : Form
{
public FrmChild(string childName)
{
InitializeComponent();
this.Text += childName;
}
#region 主窗体接收子窗体消息
public delRecMsg Recmsg;
private void btSend_Click(object sender, EventArgs e)
{
Recmsg(this.txtChildSendMsg.Text.Trim(), this.Text);
}
#endregion
#region 主窗体向子窗体发送消息
public void PassMsg(string msg)
{
this.txtChildRecMsg.Text = msg;
}
#endregion
}
}



namespace _003_基于Delegate实现窗体间信息交互
{
public delegate void delRecMsg(string Recmsg,string childName);
public delegate void delSendMsg(string Sendmsg);
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
#region 主窗体接收子窗体消息
private void ShowMsg(string msg,string childName)
{
this.txtMainRecieveMsg.Text += $"{childName}的消息:{msg}\r\n";
}
private void btFrmChild_Click(object sender, EventArgs e)
{
for (int i = 1; i < 4; i++)
{
FrmChild frmChild = new FrmChild($"这是第{i}个子窗体");
frmChild.Show();
frmChild.Recmsg += ShowMsg;
SendMsg += frmChild.PassMsg;
this.list.Add(frmChild);
}
}
#endregion
#region 主窗体向子窗体发送消息
private delSendMsg SendMsg;
private void btMainSend_Click(object sender, EventArgs e)
{
SendMsg(this.txtMainSendMsg.Text);
}
#endregion
private void btClear_Click(object sender, EventArgs e)
{
this.txtMainRecieveMsg.Clear();
this.txtMainSendMsg.Clear();
}
private List<Form> list=new List<Form>();
private void btCloseChild_Click(object sender, EventArgs e)
{
foreach (Form frm in list)
{
frm.Close();
}
}
}
}



该文章在 2025/3/17 14:54:06 编辑过