主页面
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
SubFrm subFrm = new SubFrm(); //初始化时新建副页面
subFrm.dAdd += AddCount; //将主页面的方法(函数)通过委托传给副页面创建的委托实例
this.maindeleAdd += subFrm.SubAdd; //将副页面的方法(函数)通过委托传给主页面创建的委托实例
subFrm.Show();
}
//在主界面创建一个委托实例, 用来添加副页面的方法
public deleAdd maindeleAdd;
//用副页面按钮给主页面增加变量,
//创造一个方法(函数)AddCount,用来给本页面(主)的可视化界面赋值
public void AddCount(string count)
{
this.label1.Text = count;
}
//用主页面按钮给副页面增加变量
int mainCount = 0;
private void mainBtn_Click(object sender, EventArgs e)
{
mainCount++;
maindeleAdd(mainCount.ToString());
}
}
public delegate void deleAdd(string count);
}
副页面
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Test
{
public partial class SubFrm : Form
{
public SubFrm()
{
InitializeComponent();
}
public deleAdd dAdd; //创建副页面的委托实例,用来添加主页面的方法
int count = 0;
//用副页面按钮给主页面增加变量,
private void btn1_Click(object sender, EventArgs e)
{
count++;
if (dAdd != null)
{
dAdd(count.ToString());
}
}
//创造一个方法(函数)SubAdd, 用来给本页面(副)的可视化界面赋值
public void SubAdd (string count)
{
this.SubLabel.Text = count;
}
}
}
主页面同时给3个副页面发消息
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Demo2
{
public partial class FrmMain : Form
{
public FrmMain()
{
InitializeComponent();
FrmOther01 objFrm01 = new FrmOther01();
FrmOther02 objFrm02 = new FrmOther02();
FrmOther03 objFrm03 = new FrmOther03();
//将委托变量和具体方法关联
this.msgSender += objFrm01.Receiver;
this.msgSender += objFrm02.Receiver;
this.msgSender += objFrm03.Receiver;
objFrm01.Show();
objFrm02.Show();
objFrm03.Show();
}
//根据委托创建委托对象
public ShowCounter msgSender;
private int counter = 0;
private void btnClick_Click(object sender, EventArgs e)
{
counter++;
//同时对三个从窗体发消息
this.msgSender.Invoke(counter.ToString());
}
private void btnReset_Click(object sender, EventArgs e)
{
counter = 0;
this.msgSender("0");
}
}
//【1】声明委托
public delegate void ShowCounter(string counter);
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Demo2
{
public partial class FrmOther01 : Form
{
public FrmOther01()
{
InitializeComponent();
}
/// <summary>
/// 接收委托传递的信息
/// </summary>
/// <param name="counter"></param>
public void Receiver(string counter)
{
this.lblCount.Text = counter;
}
}
}
using static FrmMainTest.Frm2;
namespace FrmMainTest
{
public partial class FrmMain1 : Form
{
public FrmMain1()
{
InitializeComponent();
frm2 = new Frm2();
frm2.Show();
this.maindeleAdd += frm2.SubAdd;
}
private Frm2 frm2;
public deleAdd maindeleAdd;
private void btn1_Click(object sender, EventArgs e)
{
}
private void btn2_Click(object sender, EventArgs e)
{
frm2.Close();
}
int mainCount = 0;
private void btn3_Click(object sender, EventArgs e)
{
mainCount++;
maindeleAdd(mainCount.ToString());
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace FrmMainTest
{
public partial class Frm2 : Form
{
public Frm2()
{
InitializeComponent();
}
public delegate void deleAdd(string count);
public void SubAdd(string count)
{
this.textBox1.Text = count;
}
}
}