C#通过多窗口通信理解委托

场景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);
        }

你可能感兴趣的:(C#通过多窗口通信理解委托)