一个Control类,我不仅override 了OnClick 方法,
同时写了Click+=New EventHandler(Control_Click)
请问当我点击一下鼠标,Onclick 方法和Control_Click方法谁先被调用,它们有什么区别?

解决方案 »

  1.   

    OnClick先被调用 
    OnClick是在内部实现 先调用这个方法,再向外面抛出Click事件
    也就是你注册的Click事件来的了 
      

  2.   

    先执行Click事件,再执行OnClick.
    效果差异不大,但通常的做法是,事件是由用户(即使用这个控件的程序员)使用的。而你写控件,应该重写OnClick方法。
      

  3.   

    OnClick是事件,当事件发生后先内部处理(如果override了OnClick事件的话),如果挂接了事件处理方法的话(添加EventHandler)则进行处理,所以出现所说的结果并不意外。
      

  4.   

    更正一下,2樓有誤,應該是OnClick先執行,而Click事件是在OnClick內部觸發的。    class MyButton:Button
        {
            protected override void OnClick(EventArgs e)
            {
                MessageBox.Show("onclick");
           //下面這行代碼調用Button類的OnClick方法。該方法會在內部觸發Click事件。
                  //如果你刪除這行代碼,Click事件將不會觸發
                base.OnClick(e);  
            }
            public MyButton()
            {
                base.Click += new EventHandler(MyButton_Click);
            }        void MyButton_Click(object sender, EventArgs e)
            {
                MessageBox.Show("click");
            }
        }
      

  5.   

    Onclick
    protected virtual void OnClick(object sender, EventArgs e)
    {
      clickEventHandler.Invoke(sender, e);//调用注册的事件
    }
      

  6.   

    一句话,事件是它的触发器引发的而OnClick就是Click的触发器