之前总是各种脑补,看了http://www.cnblogs.com/JimmyZhang/archive/2007/09/23/903360.html和http://www.cnblogs.com/zhili/archive/2012/10/22/Delegate.html 这两篇博文,本以为自己懂了其中的意思,看着好像明白他们讲的东西,但是一到别人问起来却不知道怎么回答,囧了,别人写出来的东西还是别人的思想,与自己好像没有半毛钱的关系,所以,真正遇到问题的时候,用到委托,用到事件的时候才会对他们的理解更加深刻,不至于,别人问“什么时候用委托?” 自己只能傻眼以对。。。
在我的项目中,自定义控件中定义了许多要用到的控件,比如下面这个控件BtnLists.
这个自定义控件在MyControls类中
控件是用来使用的,在主界面中需将上面的控件布局到主界面中,然后需要对控件进行处理,也就是单击不同的按钮要触发不同的事件。
这个要怎样实现效果呢?首先我们知道BtnLists 被应用到主界面时已经是一个整体,如何区分且控制其中每个按钮所发生的事件呢? 我可以说,刚开始的时候,对这个问题我只能耸耸肩木?
后面老大提了一句用委托,事件处理,哦?好像终于用到以前脑补的各种知识了,可是现在怎么就用不出来了呢?书呆子一个的我。。。
立即看了下别人的例子,懂了,会模仿了。。。
在BtnLists类中为控件定义一个事件。
#region 登陆密码按钮的单击事件 private void btnLogin_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { OnLoginClick(this, e); } public delegate void LoginClickHandler(object sender, RoutedEventArgs e); public event LoginClickHandler LoginClick; private void OnLoginClick(object sender, RoutedEventArgs e)//事件的注册 { if (LoginClick != null) { LoginClick(this,e); } } #endregion
在主界面MainPage类中用到该BtnLists时,就会有这个事件
点击进去,你就可以再方法里写你想要的实现效果了
private void myBtnLists_LoginClick(object sender, RoutedEventArgs e) { Views.UserInfo.Login_Pwd lp = new Views.UserInfo.Login_Pwd(); lp.Show(); }
刚开始想用到Login_Pwd 这个类时,要引用其程序集,然后就变成循环依赖了,囧,明显地处理不正确。。现在实现就不那么囧了,虽然有些还是做得很挫。。
加深理解,灵活变通。嗯,现在是上班,在写博客,有点。。。。。。