浅析C#的事件处理和自定义事件
一、简单的自定义事件(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#的事件处理和自定义事件相关推荐
- Javascript框架的自定义事件(转)
很多 javascript 框架都提供了自定义事件(custom events),例如 jquery.yui 以及 dojo 都支持"document ready"事件.而部分自定 ...
- javascript中自定义事件
自定义事件:用户可以指定事件类型,这个类型实际上就是一个字符串,然后为这个类型的事件指定事件处理函数,可以注册多个事件处理函数(用数组管理),调用时,从多个事件处理函数中找到再调用. function ...
- C#:委托和自定义事件
1. 委托概述 "委托"相当于C++中的"函数指针",委托必须与所要"指向"的函数在"参数"和"返回类型&qu ...
- 如何在JavaScript中使用自定义事件
2019独角兽企业重金招聘Python工程师标准>>> JavaScript 的事件处理是所有浏览器端程序的基本必备技巧.当目标元素的事件被触发时,比如按钮被点击,鼠标移动,或者是表 ...
- html加上 extjs右键,extjs 处理HTML事件和自定义事件
1. 处理HTML元素的标准事件 HTML元素的标准事件是指mouseover.mousedown.click. blur.focus.change等.在ExtJS中,这些事件的处理如下: 注册一个事 ...
- C#事件-自定义事件
事件有很多,比如说 鼠标的事件:MouserMove,MouserDown等. 键盘的事件:KeyUp,KeyDown,KeyPress. 有事件,就会有对事件进行处理的方法,而事件和处理方法之间是怎 ...
- 观察者模式和js自定义事件
事件是一种叫做观察者的设计模式,观察者模式由两类对象组成:主体和观察者.主体负责发布事件,同时观察者通过订阅这些事件来观察该主体.拿DOM来说,DOM就是主体,事件处理代码便是观察者. 下面是一个自定 ...
- Qt线程间通信-自定义事件
线程间通信: 1.自定义事件:postEvent(): 2.信号与槽[本质也是通过自定义事件实现的] 注意:每个线程都有自己的事件循环 自定义事件: 1.从QEvent继承: 2.registerEv ...
- Node.js: 如何继承 events 自定义事件及触发函数
events 是node.js的核心api ,几乎大部分node.js 的api都继承 events 类(javascript中没有类,也不存在继承,确切说是模拟类和继承,点击查看) 比如我们常见的 ...
最新文章
- c/c++ 获取文件夹或目录下的文件
- 第一个OC类、解析第一个OC程序
- ActiveMQ 的客户端选项
- LibSVM 使用错误解决
- Mac 编译安装 Redis-3.2.3
- POJ 2967 (水题,考察putchar()按位输入)
- mycat 不得不说的缘分
- php设置表单为整数,PHP中如何判断FROM表单提交的数字是否为整数?
- tsv文件导oracle窜列,TSV(tsv文档怎么转换excel)
- ofo在MaxCompute的大数据开发之路
- lzg_ad:使用EWF API开发常见问题
- 计算机网络基础中职期中,计算机网络基础 期中试卷
- Linux笔记:Ubuntu18.04有线网络和无线网络的优先级设置
- 蔡凯龙:跨界是一种寻求人生宽度的方式
- 股票实战分析专题-金融量化初级练习使用
- 三阶魔方六面拼齐教程
- 人工智能几乎会影响到 IT 行业的每个方面,包括编程和开发
- 服务器,ping没问题,请求经常超时、时好时坏的解决办法
- Settings简介
- 微信公众号网面开发中的制授权问题
热门文章
- LeetCode 1521. 找到最接近目标值的函数值(位运算)
- LeetCode 1245. 树的直径(图的最大直径结论)
- LeetCode 1419. 数青蛙(脑洞题)
- LeetCode 355. 设计推特(哈希map+set)
- LeetCode 1348. 推文计数(哈希map+set)
- LeetCode 1. 两数之和(哈希)
- 字符变量赋值规则_Java的常量、变量、数据类型(基础篇二)
- 奇数阶幻方 java_N(奇数)阶幻方-java实现代码
- 全网Star最多(近20k)的Spring Boot开源教程 2019 年要继续更新了!
- 基于 KIF 的 iOS UI 自动化测试和持续集成