利用委託進行主從窗體之間通信

1.從窗體向主窗體發送消息

1.在主窗體中創建委託

2.主窗體中聲明委託的方法

3.從窗體調用

代碼如下:

/// <summary>
/// 主窗體
/// </summary>
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            
            Form2 obj = new Form2();
            //將從窗體的委託變量和主窗體的對應方法關聯
            obj.msgSender = this.Receiver;
            obj.Show();
        }

        private void Receiver(string counter)
        {
            this.lblCount.Text = counter;
        }
    }

    /// <summary>
    /// 聲明委託
    /// </summary>
    /// <param name="counter"></param>
    public delegate void ShowCounter(string counter);
//從窗體

public Form2()
        {
            InitializeComponent();
        }

        //根據委託創建委託對象
        public ShowCounter msgSender;
        private int counter = 0;

        private void button1_Click(object sender, EventArgs e)
        {
            counter++;
            if (msgSender != null)
            {
                msgSender(counter.ToString());
            }
        }

 

 

2.主窗體向從窗體發送信息(廣播)

//主窗體

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            Frm01 obj1 = new Frm01();
            Frm02 obj2 = new Frm02();
            Frm03 obj3 = new Frm03();

            this.msgSender += obj1.Receicee;
            this.msgSender += obj2.Receicee;
            this.msgSender += obj3.Receicee;

            obj1.Show();
            obj2.Show();
            obj3.Show();

        }
        public ShowCounter msgSender;
        private int counter = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            counter++;
            //同時發送消息
            this.msgSender.Invoke(counter.ToString());
        }

        private void button2_Click(object sender, EventArgs e)
        {
            counter = 0;
            this.msgSender.Invoke("0");
        }
    }

    public delegate void ShowCounter(string counter);

 

從窗體

public partial class Frm01 : Form
    {
        public Frm01()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 接收委託傳遞的信息
        /// </summary>
        /// <param name="counter"></param>
        public void Receicee(string counter)
        {
            this.lblCount.Text = counter;
        }
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章