在应用C#过程中,经常会出现通过“窗口2”来处理“窗口1”上的控件和显示内容等。可以通过事件的处理方式来完成,具体步骤如下:
1、在“窗体2”中声明事件
public delegate void Change();
public event Change myChangeevent;
2、编写按钮单击事件
myChangeevent();//执行事件
3、在“窗体1”中声明“窗体2”的事件,并编写事件处理函数来处理“窗体1”的控件和内容
按钮单击函数
Form2 f = new Form2();
f.Show();
f.myChangeevent += new Form2.Change(f_myChangeevent);
事件处理函数
void f_myChangeevent()
{
//throw new NotImplementedException();
textBox1.Text = "事件执行成功";
}
完整的程序代码:
Form1:
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9
10 namespace Test跨窗体
11 {
12 public partial class Form1 : Form
13 {
14 public Form1()
15 {
16 InitializeComponent();
17 }
18
19 private void button1_Click(object sender, EventArgs e)
20 {
21 Form2 f = new Form2();
22 f.Show();
23 f.myChangeevent += new Form2.Change(f_myChangeevent);
24 }void f_myChangeevent()
25 {
26 //throw new NotImplementedException();
27 textBox1.Text = "事件执行成功";
28 }
29 }
30 }
Form2:
1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9
10 namespace Test跨窗体
11 {
12 public partial class Form2 : Form
13 {
14 public Form2()
15 {
16 InitializeComponent();
17 }
18 public delegate void Change();
19 public event Change myChangeevent;
20 public Change myChange;
21 private void button1_Click(object sender, EventArgs e)
22 {
23 //myChange = new Change(Print);
24 //this.Invoke(myChange);//执行委托
25 myChangeevent();//执行事件
26 }
27 private void Print()
28 {
29 button1.Text = "委托执行";
30 }
31 }
32 }
委托和事件的最大区别在于:委托可以在任意时刻调用处理函数,而事件只能在固定的出发了当前事件时才能调用。