阅读内容 

利用自定义事件实现不同窗体间的通讯 -- C#篇

[日期:2005-04-10] 来源:中国站长学院  作者:郁郁小蝎 [字体: ]
?C# 中的“事件”是当对象满足一定条件,发生某些事情时,类向该类的客户提供通知的一种方法。使用事件,拥有该事件的对象不必知道需要通知谁,一旦满足了某个条件,将自动调用该事件,正确通知每个需要通知的对象。通过使用事件,提高了程序的模块化程度。
?
要在程序中使用自定义事件,需按以下步骤进行:
?
1、声明事件
要在类内声明事件,首先必须声明该事件的委托类型:
public delegate void SelectionChangedEventHandler(object sender,
????SelectionChangedEventArgs 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;
????}
}
?
委托类型定义传递给处理该事件的方法的一组参数。多个事件可共享相同的委托类型,因此仅当尚未声明任何合适的委托类型时才需要执行该步骤。
?
接下来,声明事件本身:
public event SelectionChangedEventHandler SelectionChanged;
?
?
2、调用事件
如果没有任何客户将委托与该事件挂钩,该字段将为空;否则该字段引用应在调用该事件时调用的委托。因此,调用事件时通常先检查是否为空,然后再调用事件。
public class Form2 : System.Windows.Forms.Form
{
????... ...
?
????public event SelectionChangedEventHandler SelectionChanged;
?
????... ...
?
????private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
????{
????????if (SelectionChanged != null)
????????{
????????????SelectionChangedEventArgs E = new SelectionChangedEventArgs(comboBox1.Text);
????????????SelectionChanged(this, E);
????????}
????}
}
?
3、与事件挂钩
为了开始接收事件调用,客户代码先创建事件类型的委托,该委托引用应从事件调用的方法。然后它使用 += 将该委托写到事件可能连接到的其他任何委托上。
public class Form1 : System.Windows.Forms.Form
{
????... ...
?
????private Form2 m_frm2;
?
????... ...
?
????public Form1()
????{
????????... ...
?
????????m_frm2 = new Form2();
?
??????????//与事件挂钩
????????m_frm2.SelectionChanged += new SelectionChangedEventHandler(frm2_SelectionChanged);
????}
?
????... ...
?
????private void button1_Click(object sender, System.EventArgs e)
????{
????????m_frm2.ShowDialog();
????}
?
????private void frm2_SelectionChanged(object sender, SelectionChangedEventArgs e)
????{
???????????//获取事件传递过来的数据
????????textBox1.Text = e.Selection;
????}
}
?
本示例效果如下图所示:
?
阅读:
录入:

推荐 】 【 打印
相关新闻      
本文评论       全部评论
发表评论
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款


点评: 字数
姓名:
Advertisement
内容查询


Advertisement