关于EventHandler的使用
也就是委托和事件的使用。使用过,但了解的不够深入,现在逐渐来填以前留下的坑吧。
EventHandler, EventHandler<TEventArg> 是.net Framework内部定义的两个委托.
从定义来看 ,后者是以泛型的形式来接收参数TEventArgs,可以是继承于EventArgs 的子类;
// 摘要:
// 表示将处理不包含事件数据的事件的方法。
//
// 参数:
// sender:
// 事件源。
//
// e:
// 不包含任何事件数据的 System.EventArgs。
[Serializable]
[ComVisible(true)]
public delegate void EventHandler(object sender, EventArgs e); // 摘要:
// 表示将处理事件的方法。
//
// 参数:
// sender:
// 事件源。
//
// e:
// 一个包含事件数据的 System.EventArgs。
//
// 类型参数:
// TEventArgs:
// 由该事件生成的事件数据的类型。
[Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
默认的System.EventArgs不包含参数,但我们可以通过继承在子类中添加我们需要的数据。
public class MyEventArgs : EventArgs
{
public string message
{
get;
set;
} public MyEventArgs(string mess)
{
message = mess;
}
}
上例中:类MyEventArgs继承于System.EventArgs,同时也定义了一个string类型的message属性,用于接收数据。
现在在具体事例来使用 MyEventArgs类
public class DoTest
{
public DoTest() { }
//定义事件
public event EventHandler<MyEventArgs> DoWork; public void Begin(string val)
{
if (DoWork != null)
{
MyEventArgs e = new MyEventArgs(val);
DoWork(this, e);
}
}
}
class Program
{
static void Main(string[] args)
{
DoTest dos = new DoTest();
dos.DoWork += (s, e) =>
{
Console.WriteLine(e.message);
};
dos.Begin("");
dos.Begin("");
dos.Begin("");
dos.Begin("");
}
}
dos.DoWork 注册了匿名函数 ,功能是 输出显示 参数值message。
在调用Begin("1")函数,显示 1; 此时通过e.message就可得到传入的参数。
关于EventHandler的使用的更多相关文章
- [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)
原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...
- Visual Studio EventHandler Delegate 和 EventArgs
EventHandler代理 用来表示处理一个没有事件数据(event data)的事件(event)的 方法. 无论何时事件发生时,事件代理就被调用来触发以前事件驱动的其他事件(监听当前事件TCur ...
- C# 委托和事件(二):使用.Net框架中的EventArgs和EventHandler
前面一篇里提到事件是通过委托来进行关联的,而委托是可以带各种各样的参数的,其中就可以用事件参数(EventArgs),同时,也可以用.Net框架里边提供的一个委托EventHandler来Handle ...
- C# EventHandler and Delegate(委托的使用)
委托的声明 public delegate void MyDelegate(string str); 注 1.委托的定义和方法的定义类似,只是在前面加了一个delegate,但委托不是方法,它是一种特 ...
- 如何在osg中删除EventHandler
最近在一个项目中需要动态的添加和删除EventHandler,添加的时候很顺利,使用view->addEventHandler()函数就可以了. 不过在删除的时候,出现点麻烦. 直接调用vi ...
- js eventhandler
1.获取所有eventhandler 使用 getEventHandler(target) 2.target.addEventHandler(type,handler,userCapture?) 3. ...
- 事件委托 EventHandler
事件就是当对象或类状态发生改变时,对象或类发出的信息或通知.发出信息的对象或类称为"事件源",对事件进行处理的方法称为"接收者",通常事件源在发出状态改变信息时 ...
- 事件、委托、委托方法的总结(使用EventHandler<>)
在C#中,定义事件.委托.委托方法可以使用类库内的EventHandler泛型委托来定义事件.并根据该泛型委托定义实现方法: 同样您也可以自定义委托 来定义事件以及 根据自定义的委托来定义实现事件的方 ...
- C# 中的EventHandler
//这里定义了一个水箱类 public class 水箱 { //这是水箱的放水操作 public void 放水() { } //这是水箱的属性 public dou ...
- 关于Action<T> 、Func<T>、EventHandler<T>、event、delegate
c# 最初的时候 只有 delegate,之后的版本封装了Action<T> .Func<T>.EventHandler<T> 关于Action<T> ...
随机推荐
- C# 创建验证码图片
using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; us ...
- jquery悬停tab
<style> *{ margin:0; padding:0;} body { font:12px/19px Arial, Helvetica, sans-serif; color:#66 ...
- Winform 无边框随意拖动【转载】
本篇技术内容转载自:http://www.cnblogs.com/ap0606122/archive/2012/10/23/2734964.html using System; using Syste ...
- oracle 全文检索
一.使用 sys 用户登录oracle (1)运行—cmd—sqlplus — sys/密码 @连接字符 as sysdba 二.授权 1.grant ctxapp to 全文检索使用用户: 2.gr ...
- pair/sort/find/qsort
1. pair template <class T1, class T2> struct pair { typedef T1 first_type; typedef T2 second_t ...
- sublime快捷键保存
快捷键 功能 ctrl+shift+n 打开新Sublime ctrl+shift+w 关闭Sublime,关闭所有打开文件 ctrl+shift+t 重新打开最近关闭文件 ctrl+n 新建文件 c ...
- ECSHOP_百度收录网址后面有?from=rss
ecshop的feed.xml文件中间添加了?from=rss,百度蜘蛛抓取收录后,会出现frome页面,导致商品列表重复抓取,访问出错. 修改方法简单: 在根目录下的feed.php找到(八处), ...
- 关闭并且禁用ECSHOP缓存
ECSHOP的缓存机制从一定程度上可以减少ECSHOP反复读取数据库的几率,从而一定程度上降低服务器负担,提高访问速度.但是启用缓存机制,对一些新手站长也有不利的地方.我就遇到很多新手站长经常问,我明 ...
- CSS3 transition 动画过度属性
<!DOCTYPE html> <html> <head> <style> div { width:100px; height:100px; back ...
- javascript区分电脑与手机登陆
<script language="javascript"> function checkMobile() { var pda_user_agent_list = ne ...