一、简单的自定义事件(1):无参数

namespace UserInputMonitor

{

class UserInputMonitor

{

public delegate void UserRequest(object sender, EventArgs e);

//定义委托

public event UserRequest OnUserRequest;

//此委托类型类型的事件

public void Run()

{

bool finished = false;

do

{

if (Console.ReadLine() == "h")

{

OnUserRequest(this, new EventArgs());

}

else if (Console.ReadLine() == "e")

{

finished = true;

}

} while (!finished);

}

}

public class Client

{

public static void Main()

{

UserInputMonitor monitor = new UserInputMonitor();

new Client(monitor);

monitor.Run();

}

private void ShowMessage(object sender, EventArgs e)

{

Console.WriteLine("HaHa!!");

}

Client(UserInputMonitor m)

{

m.OnUserRequest += new UserInputMonitor.UserRequest(this.ShowMessage);

//m.OnUserRequest+=new m.UserRequest(this.ShowMessage);

//注意这种写法是错误的,因为委托是静态的

}

}

}

二、简单的自定义事件(2):包含参数

class MyEventArgs:EventArgs

{

private string keyChars;

public MyEventArgs(string keyChars)

{

this.keyChars = keyChars;

}

public string KeyChars

{

get

{

return keyChars;

}

}

}

class UserInputMonitor

{

//定义委托

public delegate void UserRequest(object sender,MyEventArgs e);

//此委托类型类型的事件,用户累加客户端事件

public event UserRequest OnUserRequest;

public void Run() //定义此事件激发的条件

{

bool finished=false;

do

{

string inputString= Console.ReadLine();

if (inputString != "")

OnUserRequest(this, new MyEventArgs(inputString));

else

finished = true;

}while(!finished);

}

}

public class Client

{

public static void Main()

{

UserInputMonitor monitor=new UserInputMonitor();

new Client(monitor);

monitor.Run();

}

private void ShowMessage(object sender,MyEventArgs e)

{

Console.WriteLine("捕捉到:{0}",e.KeyChars);

}

Client(UserInputMonitor m)

{

m.OnUserRequest+=new UserInputMonitor.UserRequest(this.ShowMessage);

//m.OnUserRequest+=new m.UserRequest(this.ShowMessage);

//注意这种写法是错误的,因为委托是静态的

}

}

转载于:https://www.cnblogs.com/qqhfeng/archive/2010/02/26/1674102.html

浅析C#的事件处理和自定义事件相关推荐

  1. Javascript框架的自定义事件(转)

    很多 javascript 框架都提供了自定义事件(custom events),例如 jquery.yui 以及 dojo 都支持"document ready"事件.而部分自定 ...

  2. javascript中自定义事件

    自定义事件:用户可以指定事件类型,这个类型实际上就是一个字符串,然后为这个类型的事件指定事件处理函数,可以注册多个事件处理函数(用数组管理),调用时,从多个事件处理函数中找到再调用. function ...

  3. C#:委托和自定义事件

    1. 委托概述 "委托"相当于C++中的"函数指针",委托必须与所要"指向"的函数在"参数"和"返回类型&qu ...

  4. 如何在JavaScript中使用自定义事件

    2019独角兽企业重金招聘Python工程师标准>>> JavaScript 的事件处理是所有浏览器端程序的基本必备技巧.当目标元素的事件被触发时,比如按钮被点击,鼠标移动,或者是表 ...

  5. html加上 extjs右键,extjs 处理HTML事件和自定义事件

    1. 处理HTML元素的标准事件 HTML元素的标准事件是指mouseover.mousedown.click. blur.focus.change等.在ExtJS中,这些事件的处理如下: 注册一个事 ...

  6. C#事件-自定义事件

    事件有很多,比如说 鼠标的事件:MouserMove,MouserDown等. 键盘的事件:KeyUp,KeyDown,KeyPress. 有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎 ...

  7. 观察者模式和js自定义事件

    事件是一种叫做观察者的设计模式,观察者模式由两类对象组成:主体和观察者.主体负责发布事件,同时观察者通过订阅这些事件来观察该主体.拿DOM来说,DOM就是主体,事件处理代码便是观察者. 下面是一个自定 ...

  8. Qt线程间通信-自定义事件

    线程间通信: 1.自定义事件:postEvent(): 2.信号与槽[本质也是通过自定义事件实现的] 注意:每个线程都有自己的事件循环 自定义事件: 1.从QEvent继承: 2.registerEv ...

  9. Node.js: 如何继承 events 自定义事件及触发函数

    events 是node.js的核心api ,几乎大部分node.js 的api都继承 events 类(javascript中没有类,也不存在继承,确切说是模拟类和继承,点击查看) 比如我们常见的 ...

最新文章

  1. c/c++ 获取文件夹或目录下的文件
  2. 第一个OC类、解析第一个OC程序
  3. ActiveMQ 的客户端选项
  4. LibSVM 使用错误解决
  5. Mac 编译安装 Redis-3.2.3
  6. POJ 2967 (水题,考察putchar()按位输入)
  7. mycat 不得不说的缘分
  8. php设置表单为整数,PHP中如何判断FROM表单提交的数字是否为整数?
  9. tsv文件导oracle窜列,TSV(tsv文档怎么转换excel)
  10. ofo在MaxCompute的大数据开发之路
  11. lzg_ad:使用EWF API开发常见问题
  12. 计算机网络基础中职期中,计算机网络基础 期中试卷
  13. Linux笔记:Ubuntu18.04有线网络和无线网络的优先级设置
  14. 蔡凯龙:跨界是一种寻求人生宽度的方式
  15. 股票实战分析专题-金融量化初级练习使用
  16. 三阶魔方六面拼齐教程
  17. 人工智能几乎会影响到 IT 行业的每个方面,包括编程和开发
  18. 服务器,ping没问题,请求经常超时、时好时坏的解决办法
  19. Settings简介
  20. 微信公众号网面开发中的制授权问题

热门文章

  1. LeetCode 1521. 找到最接近目标值的函数值(位运算)
  2. LeetCode 1245. 树的直径(图的最大直径结论)
  3. LeetCode 1419. 数青蛙(脑洞题)
  4. LeetCode 355. 设计推特(哈希map+set)
  5. LeetCode 1348. 推文计数(哈希map+set)
  6. LeetCode 1. 两数之和(哈希)
  7. 字符变量赋值规则_Java的常量、变量、数据类型(基础篇二)
  8. 奇数阶幻方 java_N(奇数)阶幻方-java实现代码
  9. 全网Star最多(近20k)的Spring Boot开源教程 2019 年要继续更新了!
  10. 基于 KIF 的 iOS UI 自动化测试和持续集成