据我目前的了解是:
1、在.NET框架的System命名空间中,定义了EventHandler委托:
public delegate void EventHandler(object sender, EventArgs e); 2、在System.Windows.Forms.Button类中,有类似如下的代码:
public class System.Windows.Forms.Button : WebControl, IPostBackEventHandler
{
    public event EventHandler Click;
    protected virtual void OnClick(EventArgs e) {
        if (this.Click != NULL) Click(this, e);
    }
}3、我们在使用的类中,通过类似如下的代码注册事件:
this.btn.Click += new EventHandler(this.Button_Click);
并在Button_Click()中写具体的操作代码。由上可知,只要调用Button的OnClick()方法,即可执行Button_Click()中的操作代码。
但问题是:当用户点击Button按钮时,操作系统是如何将消息传递给应用程序,
并最终触发OnClick()方法的呢?
另:上面认识正确与否,也敬请指教,谢谢!

解决方案 »

  1.   

    你可以在button_click(object sender, EventArgs e)函数中设个断点
    然后打开Debug->CallStack
    在CallStack点右键选Show External Code 还是比较复杂的
    我记得程序员2003或是2001年有一篇文章介绍过
      

  2.   

    help to up and learn from
      

  3.   

    鼠标点击-〉window系统收到这个消息-〉经过一系列逻辑,找到这个被点击得button,把消息发送给button ->button的一个方法(WndProc())接收到这个系统传递给它的消息-〉根据消息代码调用OnClick-〉onClick调用委托在程序中可以用
    [DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
    对一个control发送一个自定义的消息重写control的WndProc方法加入自定义消息的处理参考
    http://www.aisto.com/roeder/dotnet/CommandBar的代码