用事件注册实现窗口之间传值
事件和数据定义:
1
using System;
2
using System.Collections.Generic;
3
using System.Text;
4
5
namespace WindowsApplication1
6
{
7
public class MyEventArgs : EventArgs
8
{
9
private string _eventTag;
10
11
public MyEventArgs(string eventTag)
12
{
13
this._eventTag = eventTag;
14
}
15
16
public string EventTag
17
{
18
get
19
{
20
return this._eventTag;
21
}
22
}
23
}
24
25
public class MyData
26
{
27
public delegate void DataChanged(object sender, MyEventArgs e);
28
public event DataChanged DataChangedEvent;
29
30
private string _data;
31
32
public MyData(string data)
33
{
34
this._data = data;
35
}
36
37
public string Data
38
{
39
get
40
{
41
return this._data;
42
}
43
set
44
{
45
this._data = value;
46
47
if (this.DataChangedEvent != null)
48
{
49
MyEventArgs myeventArags = new MyEventArgs(this._data);
50
51
DataChangedEvent(this, myeventArags);
52
}
53
}
54
}
55
}
56
}
57
using System;2
using System.Collections.Generic;3
using System.Text;4

5
namespace WindowsApplication16
{7
public class MyEventArgs : EventArgs8
{9
private string _eventTag;10

11
public MyEventArgs(string eventTag)12
{13
this._eventTag = eventTag;14
}15

16
public string EventTag17
{18
get19
{20
return this._eventTag;21
}22
}23
}24

25
public class MyData26
{27
public delegate void DataChanged(object sender, MyEventArgs e);28
public event DataChanged DataChangedEvent;29

30
private string _data;31

32
public MyData(string data)33
{34
this._data = data;35
}36

37
public string Data38
{39
get40
{41
return this._data;42
}43
set44
{45
this._data = value;46

47
if (this.DataChangedEvent != null)48
{49
MyEventArgs myeventArags = new MyEventArgs(this._data);50

51
DataChangedEvent(this, myeventArags);52
}53
}54
}55
}56
}57

父窗体MainForm代码如下:
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
9
namespace WindowsApplication1
10
{
11
public partial class MainForm : Form
12
{
13
private MyData _data = new MyData("Init value");
14
15
public MainForm()
16
{
17
InitializeComponent();
18
_data.DataChangedEvent += new MyData.DataChanged(_data_DataChangedEvent);
19
SForm1 f1 = new SForm1();
20
SForm2 f2 = new SForm2();
21
22
f1.Data = _data;
23
f2.Data = _data;
24
25
f1.Show();
26
f2.Show();
27
}
28
29
void _data_DataChangedEvent(object sender, MyEventArgs e)
30
{
31
this.textBox1.Text = e.EventTag;
32
}
33
34
private void button1_Click(object sender, EventArgs e)
35
{
36
this._data.Data = this.textBox1.Text;
37
}
38
39
40
}
41
}
using System;2
using System.Collections.Generic;3
using System.ComponentModel;4
using System.Data;5
using System.Drawing;6
using System.Text;7
using System.Windows.Forms;8

9
namespace WindowsApplication110
{11
public partial class MainForm : Form12
{13
private MyData _data = new MyData("Init value");14

15
public MainForm()16
{17
InitializeComponent();18
_data.DataChangedEvent += new MyData.DataChanged(_data_DataChangedEvent);19
SForm1 f1 = new SForm1();20
SForm2 f2 = new SForm2();21

22
f1.Data = _data;23
f2.Data = _data;24

25
f1.Show();26
f2.Show();27
}28

29
void _data_DataChangedEvent(object sender, MyEventArgs e)30
{31
this.textBox1.Text = e.EventTag;32
}33

34
private void button1_Click(object sender, EventArgs e)35
{36
this._data.Data = this.textBox1.Text;37
}38

39

40
}41
}子窗体SForm1代码(SForm2的代码和SForm1的代码相同):
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
9
namespace WindowsApplication1
10
{
11
public partial class SForm1 : Form
12
{
13
private MyData _data;
14
15
public SForm1()
16
{
17
InitializeComponent();
18
}
19
20
void _data_DataChangedEvent(object sender, MyEventArgs e)
21
{
22
this.textBox1.Text = e.EventTag;
23
}
24
25
public MyData Data
26
{
27
set
28
{
29
this._data = value;
30
this._data.DataChangedEvent += new MyData.DataChanged(_data_DataChangedEvent);
31
}
32
}
33
34
private void button1_Click(object sender, EventArgs e)
35
{
36
this._data.Data = this.textBox1.Text;
37
}
38
}
39
}
using System;2
using System.Collections.Generic;3
using System.ComponentModel;4
using System.Data;5
using System.Drawing;6
using System.Text;7
using System.Windows.Forms;8

9
namespace WindowsApplication110
{11
public partial class SForm1 : Form12
{13
private MyData _data;14

15
public SForm1()16
{17
InitializeComponent();18
}19

20
void _data_DataChangedEvent(object sender, MyEventArgs e)21
{22
this.textBox1.Text = e.EventTag;23
}24

25
public MyData Data26
{27
set28
{29
this._data = value;30
this._data.DataChangedEvent += new MyData.DataChanged(_data_DataChangedEvent);31
}32
}33

34
private void button1_Click(object sender, EventArgs e)35
{36
this._data.Data = this.textBox1.Text;37
}38
}39
}