public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
}
//用来保存窗体
private List<Form> frmList = new List<Form>();
//创建多个子窗体
private void btnCreateChildForm_Click(object sender, EventArgs e)
{
for (int i = 0; i < 3; i++)
{
FrmChild child = new FrmChild($"子窗体:{i + 1}");
child.Show();
frmList.Add(child);
}
}
//第4步:编写事件响应方法
private void ReceiveMsg(string msg, string childName)
{
this.txtContent.Text += $"来自:{childName} 的消息:{msg}\r\n";
}
#region
//清空消息
private void btnClear_Click(object sender, EventArgs e)
{
this.txtContent.Clear();
}
//关闭全部
private void btnCloseAll_Click(object sender, EventArgs e)
{
foreach (var item in frmList)
{
item.Close();
}
}
#endregion
//第5步:关联事件
private void btnAddEvent_Click(object sender, EventArgs e)
{
foreach (FrmChild item in frmList)
{
item.passMsgEvent += this.ReceiveMsg;
}
}
//第5步:移除事件
private void btnRemoveEvent_Click(object sender, EventArgs e)
{
foreach (FrmChild item in frmList)
{
item.passMsgEvent -= this.ReceiveMsg;
// item.passMsgEvent = null; //这个是不行的
// item.passMsgEvent.invoke();//这种方式也不允许的
}
}
}
//第1步:声明委托
public delegate void PassMsgDelegate(string msg, string childName);
public partial class FrmChild : Form
{
public FrmChild(string childName)
{
InitializeComponent();
this.Text = childName;
}
//第2步:定义一个事件
public event PassMsgDelegate passMsgEvent;
//发送消息
private void btnSend_Click(object sender, EventArgs e)
{
if (passMsgEvent == null)
{
MessageBox.Show("请首先关联事件!","提示信息");
return;
}
//第3步:激发事件(调用委托)
passMsgEvent(this.txtSendMsg.Text, this.Text);
//passMsgEvent.Invoke();
}
}