场景1:主窗体中的私有方法,可以修改主窗体的窗体属性,要实现子窗体中触发button按钮事件或其他场景时,主窗体的私有方法可被子窗体调用,即子窗体对主窗体方法的调用更改了主窗体的属性。
场景2:子窗体中的方法可以修改子窗体的属性,主窗体触发一个事件时,主窗体调用的子窗体方法可以修改多个子窗体的属性。
简单委托的使用方法:
1.声明委托
2.创建委托方法
3.声明委托变量
4.委托变量绑定委托方法
5.使用委托
首先来看第一种场景:可以简化为一个主窗体和多个子窗体,在子窗体中输入信息后,可以调用主窗体的方法,将子窗体的信息输入子窗体中
1在声明一个委托并在主窗体中创建委托方法
public delegragte void ReciveMsg(string msg,string childName);
private void reciveMsg(string msg,string childName)
{
txtReciveMsg.text += $“来自{childName}的信息:{msg}\r\n”;
}
2.在子窗体中声明一个委托变量(因为方法要在子窗体中使用,所以在子窗体中声明变量)
public ReciveMsg reciveMsg;
3.关联委托方法
//由于我们只在创建子窗体后使用此方法,所以我们将关联置于子窗体创建过程
private void btnCreateChildForm_Click(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
FrmChild frm = new FrmChild($"子窗体{i + 1}");
frm.reciveMsg = reciveMsg;
frm.show();
}
}
4.在子窗体中使用委托变量(事件触发时调用委托方法)
private void btnSend_Click(object sender, EventArgs e)
{
reciveMsg(this.txtSendMsg.Text, this.Text);
}
场景2,类似,不再做过多赘述,代码如下
1.创建委托
public delegate void SendMsgDelegrate(string msg);
2.委托实现方法(此方法作用于子窗体,主窗体调用子窗体属性,委托方法在属于子窗体成员)
private void SendMsg(string msg)
{
this.txtReceiveMsg.Text += msg;
}
3.创建委托变量(委托变量在主窗体中使用,在主窗体创建委托变量)
private SendMsgDelegrate sendMsg;
4.关联委托方法,创建窗体时关联(注意:关联时由于要关联多个子窗体使用+=符号进行关联,否则只会关联成功最后一个窗体//我也不知道为啥)
//由于我们只在创建子窗体后使用此方法,所以我们将关联置于子窗体创建过程
private void btnCreateChildForm_Click(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
FrmChild frm = new FrmChild($"子窗体{i + 1}");
frm.reciveMsg = reciveMsg;
frm.show();
sendMsg += SendMsg;
}
}
5.使用委托变量(事件触发时使用)
private void btnBroadCast_Click(object sender, EventArgs e)
{
sendMsg(this.txtSend.Text);
}