主窗体向多个窗体传值
主窗体中的代码如下:需要写一个接口,让所有子窗体访问,并且实现接口中的方法
namespace 发布订阅模式的非委托实现 { public partial class Mainfrm : Form { public List<IchildFrm> childFrmList = new List<IchildFrm>(); public Mainfrm() { InitializeComponent(); } private void btnsend_Click(object sender, EventArgs e) { //当点击发送消息按钮时,则需要遍历 那个关注消息变化的子窗体集合 //调用集合中每个元素的一个方法 if (childFrmList==null) { return; } foreach (var item in childFrmList ) { item.GetText(this.txtMsg.Text); } } } }
接口中的代码如下:
namespace 发布订阅模式的非委托实现 { public interface IchildFrm //接口 { void GetText(string txt);//所有窗体都实现这个方法 } }
子窗体中的代码如下:(多个子窗体也是一样)
namespace 发布订阅模式的非委托实现 { public partial class Childfrm1 : Form,IchildFrm //所有子窗体都继承IchildFrm { public Childfrm1() { InitializeComponent(); } public void GetText(string txt) { this.txtMsg.Text = txt; } } }
此时还需要一个窗体来管理主窗体和子窗体,当加载该窗体时,将把主窗体和子窗体显示出来。代码如下
namespace 发布订阅模式的非委托实现 { public partial class MasterFrm : Form { public MasterFrm() { InitializeComponent(); } private void MasterFrm_Load(object sender, EventArgs e) { Mainfrm Mfrm = new 发布订阅模式的非委托实现.Mainfrm(); Mfrm.Show(); Childfrm1 cfrm1 = new Childfrm1(); //子窗体显示之前要关注主窗体的信息 Mfrm.childFrmList.Add(cfrm1); cfrm1.Show(); } } }