首页 新闻 赞助 找找看

当点击一个按钮的时候到底发生了什么

0
悬赏园豆:5 [已关闭问题] 关闭于 2013-08-22 21:17

在一个Windows Form应用程序中有一个button,当单击button时会触发Click事件然后执行Click事件处理方法。但是Click事件的本质是什么呢?通常我们写事件的时候,都会将事件的触发放在一个方法中,例如

class MyClass
{
       public event EventHandler MyEvent;  // 定义事件
       
       public void Run()  // 在某个方法中触发事件
       {
               // 其他代码
               MyEvent();
        }
}

class Program
{
      static void Main()
      {
               MyClass cl = new MyClass();
               cl.MyEvent += cl_MyEvent;    // 注册事件
               cl.Run();
       }
       private void cl_MyEvent()
       {
               //事件处理函数代码
        }
}

而WinForm是怎么处理的呢?执行这个Click方法的方法又是什么呢?

问题补充:

不要和我讲委托和事件的基础知识!这个我懂!

我只是想知道Button控件的具体实现,是如何判断点击事件的。Reflector解析的代码似乎不太好懂

飞鸟_Asuka的主页 飞鸟_Asuka | 菜鸟二级 | 园豆:209
提问于:2013-07-31 20:35
< >
分享
所有回答(2)
0

委托,观察者。等待高人解答....

幻天芒 | 园豆:37175 (高人七级) | 2013-07-31 20:45
0

首先明确几个概念,

1、event是特殊的委托

2、委托是.NET平台下实现回调函数的一种机制

3、回调函数参见:http://zh.wikipedia.org/zh-cn/%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0

1、Click的本质是什么呢?

Click本质是一个字段,其类型是EventHandler

2、WinForm是怎么处理的呢?

这叫要说到委托,为当你做一个“+-”的操作的时候你就会把这个方法(cl_MyEvent),还有当前对象(Program) 放在委托链中,什么是委托链。意如其名,委托链的数据结构实际上是一个链表。Click指向链表的开头,每当触发事件的时候就会逐个的调用链表上的节点。每个节点主要包含两个指针,一个指针指方法本身,另一个指针指向与方法关联的对象。实际上在.NET内存空间中,函数代码和实例对象本身就是分开存储的。

3、执行这个Click方法的方法又是什么呢?

请恕在下没看懂这个题目什么意思

朝曦 | 园豆:1073 (小虾三级) | 2013-07-31 21:24

我给出的示例代码中,触发MyEvent事件的是一个Run方法,那么同理在单击按钮的时候,也应该有一个方法(至少是一个执行的代码段)触发了这个Click事件,我问的就是这段代码是什么

支持(0) 反对(0) 飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2013-07-31 21:38

主要是想用Reflector看一看这段代码学习一下。。。

支持(0) 反对(0) 飞鸟_Asuka | 园豆:209 (菜鸟二级) | 2013-07-31 21:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册