正确通知每个需要通知对象通过使用事件提高了模块化程度
要在中使用自定义事件需按以下步骤进行:
1、声明事件
要在类内声明事件首先必须声明该事件委托类型:
public delegate void SelectionChangedEventHandler(object sender,
SelectionChangedEventArgs e);
介绍说明:由于本举例需在事件中传递数据因此定义了EventArgs派生类SelectionChangedEventArgs
public SelectionChangedEventArgs : EventArgs
{
private m_selection;
//本属性用于传递事件数据
public Selection
{
get { m_selection; }
}
public SelectionChangedEventArgs( selection)
{
m_selection = selection;
}
}
委托类型定义传递给处理该事件思路方法组参数多个事件可共享相同委托类型因此仅当尚未声明任何合适委托类型时才需要执行该步骤
接下来声明事件本身:
public event SelectionChangedEventHandler SelectionChanged;
2、事件
如果没有任何客户将委托和该事件挂钩该字段将为空;否则该字段引用应在该事件时委托因此事件时通常先检查是否为空然后再事件
public Form2 : .Windows.Forms.Form
{
... ...
public event SelectionChangedEventHandler SelectionChanged;
... ...
private void comboBox1_SelectedIndexChanged(object sender, .EventArgs e)
{
(SelectionChanged != null)
{
SelectionChangedEventArgs E = SelectionChangedEventArgs(comboBox1.Text);
SelectionChanged(this, E);
}
}
}
3、和事件挂钩
为了开始接收事件客户代码先创建事件类型委托该委托引用应从事件思路方法然后它使用 将该委托写到事件可能连接到其他任何委托上
public Form1 : .Windows.Forms.Form
{
... ...
private Form2 m_frm2;
... ...
public Form1
{
... ...
m_frm2 = Form2;
//和事件挂钩 [Page]
m_frm2.SelectionChanged SelectionChangedEventHandler(frm2_SelectionChanged);
}
... ...
private void button1_Click(object sender, .EventArgs e)
{
m_frm2.ShowDialog;
}
private void frm2_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
//获取事件传递过来数据
textBox1.Text = e.Selection;
}
}
最新评论