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

原文地址:https://www.cnblogs.com/841019rossi/p/15759315.html