委托 事件 监听 .net

ccsldya 2011-03-31 03:49:52
小弟刚学不久 有些概念不明白,特来请教下各位大侠

委托=函数指针,可以加上一个或多个函数一次调用
事件是特殊的委托,但是我不明白事件是怎么被监听然后调用的 在.net里面


我看design.cs 不明白new System.EventHandler这是个什么东西,为什么有
this.btn_confirm.Click += new System.EventHandler(this.btn_confirm_Click);

是干嘛用的呢

假设我想给一个button或者别的自定义控件加上一个事件,不再是什么onclick之类他自己存在的,该怎么做呢?

分不多,意思下 ,谢谢~
...全文
15491 150 打赏 收藏 转发到动态 举报
写回复
用AI写文章
150 条回复
切换为时间正序
请发表友善的回复…
发表回复
盼着到1 2013-10-24
  • 打赏
  • 举报
回复
引用 楼主 ccsldya 的回复:
小弟刚学不久 有些概念不明白,特来请教下各位大侠 委托=函数指针,可以加上一个或多个函数一次调用 事件是特殊的委托,但是我不明白事件是怎么被监听然后调用的 在.net里面 我看design.cs 不明白new System.EventHandler这是个什么东西,为什么有 this.btn_confirm.Click += new System.EventHandler(this.btn_confirm_Click); 是干嘛用的呢 假设我想给一个button或者别的自定义控件加上一个事件,不再是什么onclick之类他自己存在的,该怎么做呢? 分不多,意思下 ,谢谢~
哎..对于你的那个事件,这个System.EventHandller就是委托,后边括号里的就是委托方法(btn_confirm_Click),Click就是相当于调用了个Click方法
难得自然萌 2013-08-22
  • 打赏
  • 举报
回复
收藏了,介绍的不错,还得自己用用才能真懂
clhwxl 2013-08-15
  • 打赏
  • 举报
回复
多谢分享!学习!
hxzWoNiu 2013-06-03
  • 打赏
  • 举报
回复
引用 143 楼 hxzWoNiu 的回复:
[quote=引用 142 楼 hxzWoNiu 的回复:] [quote=引用 120 楼 askdhjhwgeljasd 的回复:] [Quote=引用 32 楼 的回复:] 引用 16 楼 ccsldya 的回复: 引用 9 楼 cfvgodot 的回复: 引用 6 楼 ccsldya 的回复: 恩 受教了。。经常听这句,就自认为 委托就是可以一起调用几个函数....因为经验少,确实没用到的经验,不太明白有什么用,因为如果要调用函数的话还是直接调用函数就行了,为啥隔一步调用委托呢。? 有的时候没办法直接调用的,比如说你这个按钮,如果没有委托的…… [/Quote]

public class Test
{
public delegate void NewDelegate();
public NewDelegate TestDelegate;//委托
public static event TestDelegate TestEvent;//事件 

//比如你有一个按钮的CLICK响应时间,你就可以在这里调用
private void Button1_Click(object sender, EventArgs e)
{
   TestDelegate();//执行委托
   TestEvent();//执行事件
}
}
在试验这段代码的时候 public static event TestDelegate TestEvent;这一行有个错误提示 “WindowsFormsApplication5.Form1.TestDelegate”是“字段”,但此处被当做“类型”来使用 这是怎么回事呢 VS2010
public static event NewDelegate TestEvent; 这样写[/quote] 上面写错了
hxzWoNiu 2013-06-03
  • 打赏
  • 举报
回复
引用 142 楼 hxzWoNiu 的回复:
[quote=引用 120 楼 askdhjhwgeljasd 的回复:] [Quote=引用 32 楼 的回复:] 引用 16 楼 ccsldya 的回复: 引用 9 楼 cfvgodot 的回复: 引用 6 楼 ccsldya 的回复: 恩 受教了。。经常听这句,就自认为 委托就是可以一起调用几个函数....因为经验少,确实没用到的经验,不太明白有什么用,因为如果要调用函数的话还是直接调用函数就行了,为啥隔一步调用委托呢。? 有的时候没办法直接调用的,比如说你这个按钮,如果没有委托的…… [/Quote]

public class Test
{
public delegate void NewDelegate();
public NewDelegate TestDelegate;//委托
public static event TestDelegate TestEvent;//事件 

//比如你有一个按钮的CLICK响应时间,你就可以在这里调用
private void Button1_Click(object sender, EventArgs e)
{
   TestDelegate();//执行委托
   TestEvent();//执行事件
}
}
在试验这段代码的时候 public static event TestDelegate TestEvent;这一行有个错误提示 “WindowsFormsApplication5.Form1.TestDelegate”是“字段”,但此处被当做“类型”来使用 这是怎么回事呢 VS2010
public static event TestDelegate TestEvent; 这样写
hxzWoNiu 2013-06-03
  • 打赏
  • 举报
回复
引用 120 楼 askdhjhwgeljasd 的回复:
[Quote=引用 32 楼 的回复:] 引用 16 楼 ccsldya 的回复: 引用 9 楼 cfvgodot 的回复: 引用 6 楼 ccsldya 的回复: 恩 受教了。。经常听这句,就自认为 委托就是可以一起调用几个函数....因为经验少,确实没用到的经验,不太明白有什么用,因为如果要调用函数的话还是直接调用函数就行了,为啥隔一步调用委托呢。? 有的时候没办法直接调用的,比如说你这个按钮,如果没有委托的…… [/Quote]

public class Test
{
public delegate void NewDelegate();
public NewDelegate TestDelegate;//委托
public static event TestDelegate TestEvent;//事件 

//比如你有一个按钮的CLICK响应时间,你就可以在这里调用
private void Button1_Click(object sender, EventArgs e)
{
   TestDelegate();//执行委托
   TestEvent();//执行事件
}
}
在试验这段代码的时候 public static event TestDelegate TestEvent;这一行有个错误提示 “WindowsFormsApplication5.Form1.TestDelegate”是“字段”,但此处被当做“类型”来使用 这是怎么回事呢 VS2010
public static event TestDelegate TestEvent;//事件 这个不是类型 出错的额电放就这
VIP_WPENG 2013-05-10
  • 打赏
  • 举报
回复
Occupy_caile 学习了
adamsale 2013-05-07
  • 打赏
  • 举报
回复
引用 6 楼 ccsldya 的回复:
[Quote=引用 3 楼 caozhy 的回复:] 参考: http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx 理解事件是怎么触发的,事件是调用对象内部触发的,如同函数调用一样。 至于按钮事件,原理一样,但是牵涉到Windows消息处理机制,理解起来会比较困难。从简单的开始。 P.S. 不要简单地认为委托是函数指针,这是一些早期从C++转向C#的程序员喜欢……[/Quote] 恩 受教了。。经常听这句,就自认为 委托就是可以一起调用几个函数....因为经验少,确实没用到的经验,不太明白有什么用,因为如果要调用函数的话还是直接调用函数就行了,为啥隔一步调用委托呢。?
已经存在的函数,你当然可以直接调用,但是未来实现的函数,你怎么调用?
疯狂田螺 2013-04-19
  • 打赏
  • 举报
回复
好好的看来大家的讨论,学习了
wumin940590725 2013-04-15
  • 打赏
  • 举报
回复
引用 27 楼 wuyazhe 的回复:
OnXX是Control的protect virtual方法。
牛v
nodiy1981 2013-03-26
  • 打赏
  • 举报
回复
我的理解委托跟接口有点相似是个契约,而事件是契约的别名,满足契约的函数可以订阅事件。
leonmiwa 2013-03-08
  • 打赏
  • 举报
回复
HAOTIEHAO TIE 好贴收藏了
mickers 2013-02-18
  • 打赏
  • 举报
回复
多来论坛接触会广一些
crystaldn 2013-02-18
  • 打赏
  • 举报
回复
学生在操场跑圈 a-b-c-d-a... cd段有个临时建筑挡住老师的视线。 体育老师告诉班长,到cd段看谁停留下来休息,记录一下告诉我。 体育老师得到报告以后,第一次加跑两圈,第二次加跑5圈,第三次****
暮春风 2012-12-02
  • 打赏
  • 举报
回复
我只是买煎饼的
m_a_s_k_e_r 2012-11-28
  • 打赏
  • 举报
回复
引用 5 楼 cfvgodot 的回复:
引用楼主 ccsldya 的回复:小弟刚学不久 有些概念不明白,特来请教下各位大侠 委托=函数指针,可以加上一个或多个函数一次调用 事件是特殊的委托,但是我不明白事件是怎么被监听然后调用的 在.net里面 我看design.cs 不明白new System.EventHandler这是个什么东西,为什么有 this.btn_confirm.Click ……
太详细了
小木匠 2012-11-15
  • 打赏
  • 举报
回复
请问:C#是怎么监听事件触发的?比如说,点击了一个按钮,是通过什么触发了点击事件.
qinzhich 2012-11-05
  • 打赏
  • 举报
回复
.NET Framework 中的事件模型基于具有事件委托,该委托将事件与事件处理程序连接。引发事件需要两个元素: 标识对事件提供响应的方法的委托。 保存事件数据的类。 委托是一个定义签名的类型,即方法的返回值类型和参数列表类型。可以使用委托类型来声明一个变量,该变量可以引用与委托签名相同的所有方法。 事件处理程序委托的标准签名定义一个没有返回值的方法,其第一个参数的类型为 Object,它引用引发事件的实例,第二个参数从 EventArgs 类型派生,它保存事件数据。如果事件不生成事件数据,则第二个参数只是 EventArgs 的一个实例。否则,第二个参数为从 EventArgs 派生的自定义类型,提供保存事件数据所需的全部字段或属性。 EventHandler 是一个预定义的委托,专用于表示不生成数据的事件的事件处理程序方法。如果事件生成数据,则必须提供自己的自定义事件数据类型,并且必须要么创建一个委托,其中第二个参数的类型为自定义类型,要么使用泛型 EventHandler<(Of <(TEventArgs>)>) 委托类并用自定义类型替代泛型类型参数。 若要将事件与处理事件的方法关联,请向事件添加委托的实例。除非移除了该委托,否则每当发生该事件时就调用事件处理程序。 MSDN上说的清清楚楚啊!
a446061915 2012-11-05
  • 打赏
  • 举报
回复
学习了.呵呵
kythfly001 2012-11-02
  • 打赏
  • 举报
回复
学习了,回帖是为了看看我的等级的
加载更多回复(108)
/// /// By: Yi Dongliang /// Date:2010-04-23 /// Socket TCP协议的服务类。引入连接会话超时概念,使用事件机制抛出服务产生的异常和接收到的数据。 /// 主要2个类: /// TcpServer 服务类,要负责监听连接,并为每一个连接创建Session后放置在Session列表中。 /// SocketSession 客户端Socket连接会话类,保存会话信息,接收处理数据,返回数据给客户端。 /// 主要2个线程: /// 监听客户端连接的线程,监听所有客户端的链接创建并分配会话。 /// 会话遍历线程,遍历会话列表,清理会话超时,客户端断开连接的会话。遍历循环每次Sleep(600). /// 注: 整个代码未经过严格测试!仅供参考! 2010/10/19 修正客户端端口状态不能及时检测的BUG,修正会话时间计算准确性。 一些其他小BUG修正 2011/03/04 修正事件激发中的一些小BUG,以及连接意外断开时的一个错误。 2011/03/08 修正事件触发时未判断委托是否为空的错误,修正当客户端主动断开连接时 Session对象仍进行数据接收将产生的错误 此版本为最稳定版本 源码下载地址: http://download.csdn.net/source/2768840 bin 目录:编译好的提供调用的程序集 ConsoleApplication1 :TcpServer 调用实例 TcpServer :服务端 SocketClient :客户端 源码有详细注释及说明。 如有任何BUG请反馈至 yidongliang123@163.com ,谢谢! www.bugucn.com
Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O, 等等. 这些高质量的 API 可以使你的JAVa代码更加优雅,更加简洁,让你工作更加轻松愉悦。下面我们就开启优雅Java编程学习之旅!   项目相关信息:   官方首页:http://code.google.com/p/guava-libraries   官方下载:http://code.google.com/p/guava-libraries/downloads/list   官方文档:http://docs.guava-libraries.googlecode.com/git/javadoc http://www.ostools.net/apidocs/apidoc?api=guava   源码包的简单说明:   com.google.common.annotations:普通注解类型。   com.google.common.base:基本工具类库和接口。   com.google.common.cache:缓存工具包,非常简单易用且功能强大的JVM内缓存。   com.google.common.collect:带泛型的集合接口扩展和实现,以及工具类,这里你会发现很多好玩的集合。   com.google.common.eventbus:发布订阅风格的事件总线。   com.google.common.hash: 哈希工具包。   com.google.common.io:I/O工具包。   com.google.common.math:原始算术类型和超大数的运算工具包。   com.google.common.net:网络工具包。   com.google.common.primitives:八种原始类型和无符号类型的静态工具包。   com.google.common.reflect:反射工具包。   com.google.common.util.concurrent:多线程工具包。   类库使用手册:   一. 基本工具类:让使用Java语言更令人愉悦。   1. 使用和避免 null:null 有语言歧义, 会产生令人费解的错误, 反正他总是让人不爽。很多 Guava 的工具类在遇到 null 时会直接拒绝或出错,而不是默默地接受他们。   2. 前提条件:更容易的对你的方法进行前提条件的测试。   3. 常见的对象方法: 简化了Object常用方法的实现, 如 hashCode() 和 toString()。   4. 排序: Guava 强大的 "fluent Comparator"比较器, 提供多关键字排序。   5. Throwable类: 简化了异常检查和错误传播。   二. 集合类:集合类库是 Guava 对 JDK 集合类的扩展, 这是 Guava 项目最完善和为人所知的部分。   1. Immutable collections(不变的集合): 防御性编程, 不可修改的集合,并且提高了效率。   2. New collection types(新集合类型):JDK collections 没有的一些集合类型,主要有:multisets,multimaps,tables, bidirectional maps等等   3. Powerful collection utilities(强大的集合工具类): java.util.Collections 中未包含的常用操作工具类   4. Extension utilities(扩展工具类): 给 Collection 对象添加一个装饰器? 实现迭代器? 我们可以更容易使用这些方法。   三. 缓存: 本地缓存,可以很方便的操作缓存对象,并且支持各种缓存失效行为模式。   四. Functional idioms(函数式): 简洁, Guava实现了Java的函数式编程,可以显著简化代码。   五. Concurrency(并发):强大,简单的抽象,让我们更容易实现简单正确的并发性代码。   1. ListenableFuture(可监听的Future): Futures,用于异步完成的回调。   2. Service: 控制事件的启动和关闭,为你管理复杂的状态逻辑。   六. Strings: 一个非常非常有用的字符串工具类: 提供 splitting,joining, padding

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧