委托与事件的关系
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();
这就是委托到事件的过程