也在挣扎基础知识中。不过Button的事件很多,可以右键属性,在那个"闪电"里面很多不一样的事件。
也可以自己写时间。

解决方案 »

  1.   

    参考:
    http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx理解事件是怎么触发的,事件是调用对象内部触发的,如同函数调用一样。至于按钮事件,原理一样,但是牵涉到Windows消息处理机制,理解起来会比较困难。从简单的开始。P.S. 不要简单地认为委托是函数指针,这是一些早期从C++转向C#的程序员喜欢说的论调。委托和函数指针有相似的特性,但是完全是不同的概念。而且新手对C++的函数指针也不了解,不了解的去类比不了解的,反而会被误导。
      

  2.   


    this.btn_confirm.Click += new System.EventHandler(this.btn_confirm_Click);System.EventHandler这个就是API的一种委托类型,你再问它是啥,我还是告诉你这是一种API的委托类型,你要是再问第三次我就揍你一顿!这个么。咋说,就是个事件的生命,btn_confirm.Click是按钮的事件属性,+=是重载的运算符,new System.EventHandler(this.btn_confirm_Click);这里就是委托了,你看this.btn_confirm_Click这个是方法,方法作为参数,说白一点就是用户通知程序一个事情,程序去做一个事情!恩  就这么个意思 = =! 比如说,小明的妈妈告诉小明去打酱油,妈妈就是用户,告诉小明的内容就是消息,小明得到消息后可以判断是打酱油,打酱油方法里边有怎么打酱油的详细实现过程,比如先到商店,给钱,拿酱油,回家!也就等同于,Click是标定好的一种行为名称,相当于打酱油,这种行为的具体实现是用户自定义的,也就是btn_confirm_Click,也就是打酱油的具体方法,妈妈就是用户,小明就是这个btn_confirm按钮,用户点了按钮,就相当于妈妈告诉了小明打酱油!我不知道这么解释行不行啊反正我一路上都这么理解的!如果你要想给BUTTON重新定义一种事件委托,那你就继承BUTTON然后重写他,你想加啥就加啥,至于说怎么重写,你自己翻书去!或者给你段DEMO。
      

  3.   

    其实讲这么多你自己想要理解也很困难的原来我也是云里雾里的,不知道MSDN讲了些什么乱七八糟的如果有机会的话你用C++去写一些WINDOWS API的东西,看看WINDOWS的消息机制,然后自然就明白这些事情了!道理是一样的
      

  4.   


    想明白啦!!!
    this.btn_confirm.Click += new System.EventHandler(this.btn_confirm_Click);
    btn_confirm.Click是控件的委托,就是windows监听到点击事件(这种api还有待研究咋搞出来的呢)的时候调用Click这个委托(因为当时定义控件的时候不知道用户写的函数名,所以就用相同类型的委托代替,用户添加函数后自动加到这个委托上面,正如cfvgodot所说,要隔一步!像接口的回调一样)
    System.EventHandler 是this.btn_confirm.Click的类型,new实例化
    谢谢~!@!!!!
      

  5.   

    事件是一种特殊的委托,但是事件是一种类
    public event EventHandler MyEvent;
    事件要跟委托的类型,请问为嘛加事件这一层,api触发后直接调用委托不就行了吗?
      

  6.   


    很遗憾,你想不完全对。
    btn_confirm.Click是使用EventHandler声明的一个事件,windows是消息驱动的,点击或按下后,会有消息发送到程序的消息队列,在消息循环中,调用按钮的OnClick方法,进而触发调用Click事件,事件由于你注册了,所以会调用你的事件响应函数,如果多次注册,会依次调用。如果是想了解事件,委托。建议你自己独立写个类,添加事件来学习,windows form已经多次封装。
      

  7.   

    就是观察者模式,本质就是回调我总觉得这委托就是函数指针,不然它还有什么其他的功能吗?
    类型安全的函数指针java里面用类封装这个方法,new ActionListener(){....}
    c#用委托(其实原有的机制就可以完成这个事,不懂c#为什么又要搞套新的东西)
      

  8.   

    windows是消息驱动的,点击或按下后,会有消息发送到程序的消息队列,在消息循环中,调用按钮的OnClick方法,进而触发调用Click事件
    这个...不是消息触发->事件->委托->绑定的函数(btn_confirm_Click)这个顺序吗?怎么会先找按钮的OnClick方法呢,他当时不知道我onClick方法的名字吧,我如果换了名字?我的理解是他根据事件找到委托
    然后根据委托上面绑定的函数执行用户所需的方法。
    但是还有个委托,为什么引入事件呢?直接消息触发委托->用户的函数不就ok? 谢谢~
      

  9.   

    OnXX是Control的protect virtual方法。 
      

  10.   

     this.btn_confirm.Click += new System.EventHandler(this.btn_confirm_Click);
    等于
    //声明MyDelegate委托
    System.EventHandler MyDelegate= new System.EventHandler(this.btn_confirm_Click);//将委托加到事件
    this.btn_confirm.Click +=MyDelegate;
    基本ok了 ,关于.Click的问题等研究下再看
    我就不信ms把他都封装全了没有的咋办!
      

  11.   

    实例说明吧。概念楼上那个被围观的大牛已经跟你说过了!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 Class Test2
    {
    Test test=new Test();
    test.TestDelegate=this.DoSomeThing;
    Test.TestEvent+= new Test.TestDelegate(DoSomeThing);
    void DoSomeThing()
    {
       //you can do something here
    }
    }
      

  12.   

    http://topic.csdn.net/u/20110331/17/08451c7b-d9af-4a94-882c-84e81dab2efc.html昨天给别人的回复这样你比较清楚为什么用委托,委托可以适用于哪些场景!
      

  13.   

    恩   是管理菜单
    CSDN-CSDN社区-.NET技术-C#管理菜单 结  帖 发  帖 回  复
      

  14.   

    cfvgodot
    我结贴了再开个新帖进来拿分。
      

  15.   

    [Quote=引用 12 楼 fengyarongaa 的回复:]
    好吧 。 层次很深啊 我看看
      

  16.   

    delegate  void  picc ();
    class test
    {
        static void Main()
        {
            picc d = a.test;
            d();
            d -= a.test;
            if (d == null)        {
                Console.WriteLine("''");
            }        Console.Read();
                }
    }
    class a
    {
        public static void test()
        {
            Console.WriteLine("成功了");
        }
    }
    LZ 兄弟插一条哈
     picc d = a.test;
    这里和PICC d = new picc(a.test);
    有什么区别
      

  17.   

    解释不了,效果一样..
    应该是picc d=a.test的时候clr很主动的帮你开辟d的空间
    直接把test的地址给d了
      哈哈~
      

  18.   

    解释不了,效果一样..
    应该是picc d=a.test的时候clr很主动的帮你开辟d的空间
    直接把test的地址给d了
      哈哈~
      

  19.   

    妈(对象)让儿子(对象)去打酱油(消息),指令(消息)“打酱油”被传给儿子,儿子的感应器-耳朵接收到消息(监听,实际上是先引起儿子注意,后有听的动作(我平时习惯一心一用,所以如此说,如果你的大脑在不同事物之间切换的频率足够大,你可以认为这两个动作是同时发生的)),结合现实情况进行消息分析,思考解决方案(设定消息处理程序),准备工作(比如找钱,与妈交互,询问要买的酱油品牌(这些内容又作为消息对象传递给“打酱油”事件的处理程序))(此事件的子事件)做好了之后,决定去打(相当于Raise事件),以上红色字体描述的内容是消息监听及处理程序,也即类对象中的Raise所在的程序(button_Click事件的监听及分析程序(Raise块)MS没公开给我们,不过我觉得应该是有的,不知其工作原理是不是和这个相同){个人看法:就生物而言,事件总可以看成是一种“应激性”,应一种变化,不过生物的应激性是应环境的变化(这个环境变化是对象外部的,当然,如果你把环境变化看成是一种意识变化(意识是生物对象本身的),把对环境的感知看成是消息循环(生物总在不断的感知环境,进而形成意识,再由于趋向(趋利避害)
    (就人而言则大多由于个人态度,或者各种标准(我们称之为科学知识的那些东西)),而决定动作,最后才是动作的执行(调用动作的Raise块)))。那个,扯远了,说回我们程序中的类对象:程序中的事件,大多,个人觉得是外部代码引起了对象内部的状态变化,偏出了预设的状态,Raise了事件(如果你想它Raise的话)}
    执行动作(打酱油),