2012年4月11日星期三

委托与事件的关系

委托与事件的关系



1. 委托实际上就是方法列表,一推方法。

2. 事件相当于,是对委托的封装,因为委托用局限性,委托可以为null或者调用自己。

下面先创建一个用户控件1

 1     public partial class UserControl : DevExpress.XtraEditors.XtraUserControl 2     { 3         public UserControl() 4         { 5             InitializeComponent(); 6         } 7         private int count = 0; 8         private DateTime lastClickTime; 9         //定义一个委托变量10         public DBClickDelegate _DBClickDelegate;11         //button的Click事件12         private void btnDBClick_Click(object sender, EventArgs e)13         {14             count++;15             if (count == 2)16             {17                 TimeSpan span = DateTime.Now - lastClickTime;18                 if (span.TotalMilliseconds <= 1000)19                 {20                     if (_DBClickDelegate != null)//判断委托是否指向了方法21                     {22                         _DBClickDelegate();//内部可以调用委托23                     }24                 }25                 count = 0;26             }27             lastClickTime = DateTime.Now;28         }29     }30     public delegate void DBClickDelegate();

下面先创建一个用户控件2

 1     public partial class UserControl : DevExpress.XtraEditors.XtraUserControl 2     { 3         public UserControl() 4         { 5             InitializeComponent(); 6         } 7         private int count = 0; 8         private DateTime lastClickTime; 9         private DBClickDelegate _DBClickDelegate;10         //委托声明为private,这样外界就无法=null或者_DBClickDelegate()伪造事件,即主动调用委托。11         //外界只能调用OnDBClick添加监听12         public event DBClickDelegate OnDBClickEvent13         {14             add15             {16                 _DBClickDelegate += value;17             }18             remove19             {20                 _DBClickDelegate -= value;21             }22         }23 24         private void btnDBClick_Click(object sender, EventArgs e)25         {26             count++;27             if (count == 2)28             {29                 TimeSpan span = DateTime.Now - lastClickTime;30                 if (span.TotalMilliseconds <= 1000)31                 {32                     if (_DBClickDelegate != null)//判断委托是否指向了方法33                     {34                         _DBClickDelegate();//内部可以调用委托35                     }36                 }37                 count = 0;38             }39             lastClickTime = DateTime.Now;40         }41         public delegate void DBClickDelegate();

下面先创建一个用户控件3

 1     public partial class UserControl : DevExpress.XtraEditors.XtraUserControl 2     { 3         public UserControl() 4         { 5             InitializeComponent(); 6         } 7         private int count = 0; 8         private DateTime lastClickTime; 9         public event DBClickDelegate OnDBClickEvent;10         private void btnDBClick_Click(object sender, EventArgs e)11         {12             count++;13             if (count == 2)14             {15                 TimeSpan span = DateTime.Now - lastClickTime;16                 if (span.TotalMilliseconds <= 1000)17                 {18                     if (OnDBClickEvent != null)//判断事件是否指向了方法19                     {20                         OnDBClickEvent();//调用事件21                     }22                 }23                 count = 0;24             }25             lastClickTime = DateTime.Now;26         }27         public delegate void DBClickDelegate();

这就是委托到事件的过程



TAG: