发布订阅模式的非委托实现

主窗体向多个窗体传值

主窗体中的代码如下:需要写一个接口,让所有子窗体访问,并且实现接口中的方法

 

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();
        }
    }
}

 

posted @ 2018-09-27 17:45  逍遥汉21  阅读(87)  评论(0编辑  收藏  举报