委托与事件的关系

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 OnDBClickEvent
13         {
14             add
15             {
16                 _DBClickDelegate += value;
17             }
18             remove
19             {
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();

这就是委托到事件的过程

posted @ 2012-04-11 15:35  朱文锋  阅读(1827)  评论(0编辑  收藏  举报