C#通过事件event实现主窗体与子窗体间数据交互
|
admin
2025年3月19日 18:16
本文热度 756
|
主窗体接收子窗体消息
1-声明委托,要放在类的外面,在主窗体还是子窗体声明都可以
2-根据委托编写具体方法(在调用的类中写)
3-创建委托变量(谁使用谁创建,即发送方)
4-关联具体方法(委托变量和具体方法关联)(在调用的类中紧跟着对象的类写)
左边是第3步delegate声明的委托变量,右边是第2步编写的方法
5-使用委托变量调用关联的方法(在哪里使用,在哪里写,即和委托变量在一个类中)
即用第3步的委托变量替换第2步的方法名称,并传递具体参数
主窗体向子窗体发送消息
1-声明委托,要放在类的外面,在主窗体还是子窗体声明都可以
2-编写具体方法
3-创建委托变量(那里使用那里定义)
4-关联具体方法(委托变量和具体方法关联)(在调用的类中紧跟着对象的类写)
左边是第3步delegate声明的委托变量,右边是第2步编写的方法
5-使用委托变量调用关联的方法
即用第3步的委托变量替换第2步的方法名称,并传递具体参数
namespace _004_事件
{
public partial class FrmChild : Form
{
public FrmChild(string childName)
{
InitializeComponent();
this.Text += childName;
}
public event delRecMsg RecmsgEvent;
private void btSend_Click(object sender, EventArgs e)
{
RecmsgEvent(this.txtChildSendMsg.Text.Trim(), this.Text);
}
public void PassMsg(string msg)
{
this.txtChildRecMsg.Text = msg;
}
}
}
namespace _004_事件
{
public delegate void delRecMsg(string Recmsg, string childName);
public delegate void delSendMsg(string Sendmsg);
public partial class FrmMain : Form
{
public event delSendMsg SendMsgEvent;
public FrmMain()
{
InitializeComponent();
}
#region 【主窗体接收子窗体消息****】
private void ShowMsg(string msg, string childName)
{
this.txtMainRecieveMsg.Text += $"{childName}的消息:{msg}\r\n";
}
#endregion
#region 【****主窗体向子窗体发送消息】
private void btMainSend_Click(object sender, EventArgs e)
{
SendMsgEvent(this.txtMainSendMsg.Text.Trim());
}
private void btFrmChild_Click(object sender, EventArgs e)
{
for (int i = 1; i < 4; i++)
{
FrmChild frmChild = new FrmChild($"这是第{i}个子窗体");
frmChild.Show();
frmChild.RecmsgEvent += ShowMsg;
SendMsgEvent += frmChild.PassMsg;
}
}
#endregion
}
}
该文章在 2025/3/19 18:22:34 编辑过