事件就是当对象或类状态发生改变时,对象或类发出的信息或通知。发出信息的对象或类称为"事件源",对事件进行处理的方法称为"接收者",通常事件源在发出状态改变信息时,它并不知道由哪个事件接收者来处理.这就需要一种管理机制来协调事件源和接收者,C++中通过函数指针来完成的.在C#中事件使用委托来为触发时将调用的方法提供类型安全的封装

事件的声明

1.声明一个委托
public delegate void EventHandler(object sender, System.EventArgs e);

2.声明一个事件
public event EventHandler Changed;

3.引发一个事件
public OnChanged(EnventArgs e)
{
 if ( Changed != null)
 {
  Changed(this,e);
 }
}

4.定义事件处理程序
public MyText_OnChanged(Object sender,EventArgs e)
{
 ...
}

5.订阅事件(将事件处理程序添加到事件的调用列表中)

myText.Changed += EventHandler(MyText_OnChanged);

[csharp] view plaincopy print?
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace 事件的委托
  6. {
  7. class Program
  8. {
  9. static void Main(string[] args)
  10. {
  11. MyClass myClass = new MyClass();
  12. // 6,将事件处理程序添加到事件的调用列表中(即事件布线)
  13. myClass.Changed += new MyClass.ChangedEventHandler(myText_Changed);
  14. string str = "";
  15. while (str != "quit")
  16. {
  17. Console.WriteLine("please enter a string:");
  18. str = Console.ReadLine();
  19. myClass.Text = str;
  20. }
  21. }
  22. // 对Change事件处理的程序
  23. private static void myText_Changed(object sender, EventArgs e)
  24. {
  25. Console.WriteLine("text has been changed  :{0}\n", ((MyClass)sender).Text);
  26. }
  27. }
  28. public class MyClass
  29. {
  30. //1,声明空字符传myStr;
  31. private string myStr = "";
  32. //2,定义事件的委托
  33. public delegate void ChangedEventHandler(object sender, EventArgs e);
  34. //3,定义一个事件
  35. public event ChangedEventHandler Changed;
  36. //4,触发事件
  37. protected virtual void OnChanged(EventArgs e)
  38. {
  39. if (this.Changed != null)
  40. this.Changed(this, e);
  41. }
  42. // 5,Text属性
  43. public string Text
  44. {
  45. get { return this.myStr; }
  46. set
  47. {
  48. this.myStr = value;
  49. // 文本改变时触发Change事件
  50. this.OnChanged(new EventArgs());
  51. }
  52. }
  53. }
  54. }

事件委托 EventHandler 。相关推荐

  1. java eventhandler 触发_事件委托 EventHandler

    事件就是当对象或类状态发生改变时,对象或类发出的信息或通知.发出信息的对象或类称为"事件源",对事件进行处理的方法称为"接收者",通常事件源在发出状态改变信息时 ...

  2. C# 实例解析事件委托之EventHandler

    概述 事件属于委托的一个子集,像我们平时界面上的鼠标点击按钮后响应事件.事件的发布和订阅等都需要用到委托.通过委托可以很好的实现类之间的解耦好.事件委托EventHandler的 函数原型如下:del ...

  3. C# 的 事件 与 EventHandler

    事件接受与发送是通过 委托来实现的,随意,在学习事件之前一定要知道委托. 首先我们先看下图:上的图不完整人,但大概是这个意思. 我们要创建一个事件管理. 来处理发布者发送消息和订阅者的接受消息中间转接 ...

  4. 在C#中使用代理的方式触发事件 (委托和事件 ) (转)

    From:  http://www.cnblogs.com/gzhnan/articles/1859477.html 在C#中使用代理的方式触发事件 (委托和事件 ) 事件(event)是一个非常重要 ...

  5. .net 事件委托 java_仿net事件委托的java事件模型实现(转csdn)

    作为对比,我们来看看Java Swing的事件处理和委托就要复杂很多:代码如下:(您若还不是很了解Swing事件驱动的话,可以参考我的另外一篇文章:事件驱动模型实例详解(Java篇))://为btnS ...

  6. Java观察者模式事件委托(通过dota和王者荣耀故事讲解)

    故事情景 首先介绍下故事的三位同学,阿顾.蛋蛋和洋洋,蛋蛋,洋洋喜欢玩游戏,但是又生怕班主任回来了被抓到,所以他们就找到了阿顾同学帮他们把风,但是阿顾同学不是谁都通知的,只有到阿顾那里登记的,阿顾同学 ...

  7. 观察者设计模式 Vs 事件委托(java)

    观察者设计模式 Vs 事件委托 标签: 设计模式 java 事件的委托 转载请注明原博客地址: http://blog.csdn.net/gdutxiaoxu/article/details/5182 ...

  8. dom元素滚动条高度 js_DOM 事件与事件委托

    点击事件 <div class = 爷爷><div class = 爸爸><div class = 儿子>文字</div></div> &l ...

  9. JavaScript:事件冒泡和事件委托

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript事件代理和委托(Delegation) JavaScript事件冒泡和事件委托 JavaScript:通过 ...

最新文章

  1. centos安装mysql wsl_在 Windows Linux 子系统中安装 CentOS
  2. 前沿丨人工智能的框架战争:FB继续挑战Google
  3. python画图程序有图-python画图程序
  4. SAP BDC 技术的分类(转)
  5. scss支持的嵌套css规则
  6. php中的break语句格式,PHP中break语句的应用
  7. 电脑无限重启rpc服务器不可用,StarUML启动时候出现System Error. Code:1722. RPC服务器不可用.错误的解决办法...
  8. Oracle join
  9. 详解MySQL的用户密码过期功能
  10. 【数据科学赛】CAIL 2022 #八赛道 #NLP #文本匹配 #信息抽取
  11. 在Openwrt 上使用迅雷远程下载功能
  12. 短线交易有这些特点的,慎做短线交易
  13. 华清远见嵌入式Linux就业培训班
  14. springboot/maven-orika 映射
  15. 做跨境人人都是天秤座,三个月都没能建起一个店铺
  16. 与NFC相关的几种卡片
  17. 带上传文件功能的写CSDN博客并发表
  18. 马云给员工的超牛演讲
  19. 企业服务已经火了5年了,你们想过没,到底啥叫企业服务
  20. Crowding Counter 之 可视化h5文件

热门文章

  1. 用html制作简单日历,用javascript实现一个简单的日历
  2. java gsoap_gsoap c与java web之间传输字符串中文乱码问题 | 学步园
  3. fruncm server sql 无法生成 线程_MSSQLSERVER启动不了,报SQL Server 无法生成 FRunCM 线程...
  4. java综合项目推荐,推荐20个5月最热门的Java开源项目
  5. python初始化方法对应的变量是全局变量嘛_在Python中初始化全局变量的正确方法...
  6. gdb 查看结构体地址内容_程序员的术与道:术——gdb基本操作
  7. 突然决定!自掏腰包送Intel酷睿12代CPU!还有机械键盘、固态硬盘。
  8. 堆栈verilog设计实现及仿真
  9. 《FPGA入门教程》看书随笔——数字电路设计入门
  10. 不礼让行人怎么抓拍的_【交通违法曝光2019年第11期】梅河口市公安局交警大队对电子警察抓拍的88台机动车不礼让行人车辆曝光如下...