Loading...

java .net

C# 中的“事件”

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;
  }
  }

posted on 2008-08-26 22:06 阅读(119) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

公告

希望有一天

我能用鼠标双击我的钱包

然后选中一张100元

按住“ctrl+c”

接着不停的“ctrl+v”

嘻嘻~~~笑醒~~~



导航

<2008年8月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(6)

随笔分类(102)

随笔档案(398)

文章分类

文章档案(10)

有趣网络

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜