namespace _004_事件
{
//事件時對象在外界的"刺激"下發(fā)生的事情,而對外提供的一種消息機制
//事件的兩個參與者
//發(fā)送者,即對象本身,當(dāng)本身狀態(tài)發(fā)生變化時,觸發(fā)事件,并通知事件的接受者
//接收者,用來處理事件,在事件發(fā)送者觸發(fā)一個事件后,會自動執(zhí)行的內(nèi)容
//【主窗體接收子窗體消息****】1-聲明委托,要放在類的外面,在主窗體還是子窗體聲明都可以
public delegate void delRecMsg(string Recmsg, string childName);
//【****主窗體向子窗體發(fā)送消息】1-聲明委托,要放在類的外面,在主窗體還是子窗體聲明都可以
public delegate void delSendMsg(string Sendmsg);
public partial class FrmMain : Form
{
//【****主窗體向子窗體發(fā)送消息】3-定義事件變量
public event delSendMsg SendMsgEvent;//將事件定義為委托類型
public FrmMain()
{
InitializeComponent();
}
#region 【主窗體接收子窗體消息****】
//【主窗體接收子窗體消息****】2-編寫事件響應(yīng)方法
private void ShowMsg(string msg, string childName)
{
this.txtMainRecieveMsg.Text += $"{childName}的消息:{msg}\r\n";//回車換行
}
#endregion
#region 【****主窗體向子窗體發(fā)送消息】
private void btMainSend_Click(object sender, EventArgs e)
{
//【****主窗體向子窗體發(fā)送消息】5-激發(fā)事件(使用事件變量調(diào)用關(guān)聯(lián)的方法)
//相當(dāng)于調(diào)用子窗體中的frmChild.PassMsg方法,并將參數(shù)進行傳遞
SendMsgEvent(this.txtMainSendMsg.Text.Trim());
}
private void btFrmChild_Click(object sender, EventArgs e)//創(chuàng)建窗體
{
for (int i = 1; i < 4; i++)
{
FrmChild frmChild = new FrmChild($"這是第{i}個子窗體");//創(chuàng)建子窗體時給子窗體添加標(biāo)題
frmChild.Show();
//【主窗體接收子窗體消息****】4-關(guān)聯(lián)具體方法(委托變量和具體方法關(guān)聯(lián))(在調(diào)用的類中緊跟著對象的類寫)
//將事件變量與方法進行關(guān)聯(lián),左邊是委托變量,右邊是方法
frmChild.RecmsgEvent += ShowMsg;
//【****主窗體向子窗體發(fā)送消息】4-關(guān)聯(lián)具體方法(委托變量和具體方法關(guān)聯(lián))(在調(diào)用的類中緊跟著對象的類寫)
SendMsgEvent += frmChild.PassMsg;
//每次創(chuàng)建窗體時把窗體加到list集合中
//this.list.Add(frmChild);
}
}
#endregion
}
}