C# 中的“事件”是当对象满足一定条件,发生某些事情时,类向该类的客户提供通知的一种方法。使用事件,拥有该事件的对象不必知道需要通知谁,一旦满足了某个条件,将自动调用该事件,正确通知每个需要通知的对象。通过使用事件,提高了程序的模块化程度。
例子:通过form1打开form2,改变form2上combox1控件选择的值,然后将 combox1的text值返回到form1中的TextBox1的text上
在Form2中
public partial class Form2 : Form
{
public delegate void GetSelectionData(object sender, SelectionChangedEventArgs e);
public event GetSelectionData getData; //声明事件
public Form2()
{
InitializeComponent();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (getData != null)
{
SelectionChangedEventArgs E = new SelectionChangedEventArgs(comboBox1.Text);
getData(this,E);
}
}
}
//由于本示例程序需在事件中传递数据,因此定义了EventArgs的派生类SelectionChangedEventArgs。
public class SelectionChangedEventArgs : EventArgs
{
private string m_selection;
//本属性用于传递事件数据
public string Selection
{
get { return m_selection; }
}
//委托类型定义传递给处理该事件的方法的一组参数。多个事件可共享相同的委托类型,因此仅当尚未声明任何合适的委托类型时才需要执行该步骤。
public SelectionChangedEventArgs(string selection)
{
m_selection = selection;
}
}
在Form1中:
private void button2_Click(object sender, EventArgs e)
{
//为了开始接收事件调用,客户代码先创建事件类型的委托,该委托引用应从事件调用的方法。然后它使用+= 将该委托写到事件可能连接到的其他任何委托上
m_frm2 = new Form2();
m_frm2.getData += new Form2.GetSelectionData(m_frm2_SelectionChanged); //与事件挂钩
m_frm2.ShowDialog();
}
private void m_frm2_SelectionChanged(object sender,SelectionChangedEventArgs e)
{
//获取事件传递过来的数据
textBox1.Text =e.Selection;
}