zoukankan      html  css  js  c++  java
  • C#委托窗体间传递数据(转)

    C#委托窗体间传递数据

    转 https://blog.csdn.net/baidu_38174627/article/details/88827004

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

    首先委托是一种特殊数据类型
    其次委托代理的数据不是普通数据而是方法
    委托窗体间窗体数据的价值
    窗体间可以共享对象(比如工控上位机实例PLC连接时只需一个)
    主从窗体运行状态可以实时更新(工控上位机主要运用)
    窗口运行界面


    主窗体点击可以同时给从窗体加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
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    从窗体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);

    }
    }
    }

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    从窗体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);
    }
    }
    }


    原文链接:https://blog.csdn.net/baidu_38174627/article/details/88827004

  • 相关阅读:
    十分钟开发一个调用Activity的PhoneGap插件
    Mac下MAMP初试体验
    探索Android中的Parcel机制(上)
    两个栈实现队列+两个队列实现栈----java
    php实现工厂模式
    Hibernate Criterion
    Android用户界面概览
    秒杀多线程第四篇 一个经典的多线程同步问题
    Java串口通信具体解释
    逗比之——程序猿装逼手冊1(0基础版)
  • 原文地址:https://www.cnblogs.com/841019rossi/p/15759315.html
Copyright © 2011-2022 走看看