委托与事件的关系
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: