C#委托窗体间传递数据

什么是委托?

一句话:委托是一个可以代理方法的特殊数据类型

  1. 首先委托是一种特殊数据类型
  2. 其次委托代理的数据不是普通数据而是方法

委托窗体间窗体数据的价值

  • 窗体间可以共享对象(比如工控上位机实例PLC连接时只需一个)
  • 主从窗体运行状态可以实时更新(工控上位机主要运用)

窗口运行界面

C#委托窗体间传递数据_第1张图片

  • 主窗体点击可以同时给从窗体加1
  • 主窗体点击复位可以将加的值请空
  • 从窗体点击回让主窗体加1

主窗体代码

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 DelegateDemo
{

    public delegate void SendCount(int m); // 不在类外面 从窗体无法使用
    public partial class frmMain : Form
    {   
        // <一>.主窗体向从窗体发数据。。。。。。
        // [1].主窗体向从窗体发送时委托定义在主窗体中方便
        // [2].从窗体中写具体实现的方法
        // [3].打开从窗体时绑定委托与方法
        // [4].主窗体中写触发委托方法
        SendCount send;
        public frmMain()
        {
            InitializeComponent();
            FrmOther1 frm1 = new FrmOther1();
            send = frm1.ReceiveDate;
            frm1.frm1Send = ReceiveData;
            frm1.Show();
            FrmOther2 frm2 = new FrmOther2();
            frm2.frm2Send = ReceiveData;
            send += frm2.ReceiveData;
            frm2.Show();
        }

        int myCount = 1;
        private void button1_Click(object sender, EventArgs e)
        {
            myCount++;
            send?.Invoke(myCount);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            send?.Invoke(0);
            myCount = 1;
        }

        public void ReceiveData(int count)
        {
            labCount.Text = count.ToString();
        }
    }
}

从窗体1的代码如下

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 DelegateDemo
{

 
    public partial class FrmOther1 : Form
    {
        public SendCount frm1Send; // 不声明为public主窗体无法使用
        public FrmOther1()
        {
            InitializeComponent();
        }

        public void ReceiveDate(int count)
        {
            labCount.Text = count.ToString();
        }

        int count = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            count++;
            frm1Send?.Invoke(count);
           
        }
    }
}

从窗体2的代码

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 DelegateDemo
{
    public partial class FrmOther2 : Form
    {
        public FrmOther2()
        {
            InitializeComponent();
        }
        public SendCount frm2Send;
        public void ReceiveData(int count)
        {
            labCount.Text = count.ToString();
        }

        int count = 0;
        private void button1_Click(object sender, EventArgs e)
        {
            count++;
            frm2Send?.Invoke(count);
        }
    }
}

你可能感兴趣的:(C#委托窗体间传递数据)