关于事件的疑惑我自定义了一个类,里面包含一个event EventHandler<VotingEventArgs> ApprovePro
posal;事件那么在外面,我就可以定义一个委托,实例化这个委托,在把这个委托与ApprovePropo
sal事件关联起来问题在于,我怎么知道触发了我这个自定义的ApproveProposal事件?我知道当按下一个按钮时,触发了On_Click事件,但我这个事件什么时候触发呢?这个
触发条件在哪里定义呢?

解决方案 »

  1.   

    这得你自己写在想要触发的地方:
    if(myEvent!=null)
    {
        myEvent();
    }
      

  2.   

    一个Event使用的例子,下载运行一下.http://blog.csdn.net/ChengKing/archive/2006/01/07/572871.aspx
      

  3.   

    从出发关系上讲,Event(甚至Delegate)是遵循“好莱坞原则”——You don't call me,we will call you!比如你想在网络硬件发生变化的时候得到通知,你就可以给 
    System.Net.NetworkInformation.NetworkChange.NetworkAddressChangedEventHandler
    注册一个方法,这样你的方法就能被通知。你不设计服务,却想干涉服务程序的触发么?Event就是设计用来禁止你这么做的。如果服务程序将回调设计为 Delegate,那么外部可以像对待普通的对象一样遍历Delegate,甚至去删除其中的某些客户端方法。但是使用Event,外部程序就没有这种破坏力。你可以用+=、-=来处理自己的方法,然后老老实实等待回调。
      

  4.   

    sorry,打错了几个字:出发  ->  触发
    NetworkAddressChangedEventHandler  -->  NetworkAddressChanged
      

  5.   

    data-binding是怎么工作的?
    凭什么textBox.DataBinding.Add("Text", MyObj, "MyColumn");这样后我从控件可以修改MyObj的MyColumn的值,凭什么通过别的代码改变了MyObj.MyColumn的值时,textBox会立即反映出改变?事件事件事件。加上所谓的由接口构成的协议。这句话可以暂时先不管比如,我有一个MyObj对象,这个对象有个MyColumn的属性。比如我希望MyColumn的属性值改变时,能够改变它所绑定的控件,也许是TextBox的Text属性,也许是ListBox里的某个Item,也许是DataGridView的某个Cell我怎么事先知道这个MyColumn会绑定到哪个控件???我不知道是谁,我也不知道我改变时要通知谁。怎么办???事件事件事件!!!管他谁对我的改变感兴趣,只要我改变我就执行一个东西。
    class Class1 : INotifyPropertyChanged
    {
    ....
        public string MyColumn
        {
            get { return mycolumn; }
            set {
                mycolumn = valeu;
                OnMyColumnChanged("MyColumn"); //注意这里,也可以看出属性在一些地方的用途
            }
        }
        private OnMyColumnChaned(string propertyName)
        {
            if(ProprtyChanged)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
                //就是这个PropertyChanged通知控件更新自己!
            }
        }
        public event PropertyChangedEventHandler PropertyChanged; //事件
    }其实也就是这么无聊~
      

  6.   

    对了,是if(PropertyChanged != null)是一个对象或列表自己在维护着自己改变时触发某个事件的功能,而subscribe这个事件的方法都会被执行。事件本身来来去去也就玩这点把戏,没什么了不起的。