很长时间没有做过客户端的东西了,最近在WPF。今天在code refactor的过程中尝试了一把add event.
Background:
分别有Text的Datepicker和ComboBox的Datepicker
打算把单个的Calendar拿出来做一个usercontrol.
把选中的日期付给textbox,也就是说这个usercontrol里需要在选中日期的事件里来处理。
选中日期的事件:
private void calender_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
{
if (calender.SelectedDate.HasValue)
{
Myeventargs args = new Myeventargs();
args.Text = calender.SelectedDate.Value.ToShortDateString();
OnSelectDateComplete(args);
}
CalendarPopup.IsOpen = false;
}
事件的参数里需要一个string的text值,该值就是popup弹出时选中的日期,有了以下的类
public class Myeventargs : EventArgs
{
private string text;
public string Text
{
get { return text; }
set { text = value; }
}
}
因为c#本身的事件EventHandler参数发生了变化,所以重新定义了一个delegate:
public delegate void MyEventHandler(object sender, Myeventargs e);
接下来是真正add的event,只需在委托前加event关键字
public event MyEventHandler SelectDateComplete;
以下是在选中日期事件时调用的方法,即定义的事件如何触发
protected virtual void OnSelectDateComplete(Myeventargs e)
{
if (SelectDateComplete != null)
SelectDateComplete(this, e);
}
这样就完成对usercontrol添加事件的操作了。
接下来在TextBoxDatepicker的类中使用该事件:
private void CalendarHelper_SelectDateComplete(object sender, Myeventargs e)
{
this.Text = e.Text.ToString();
this.Focus();
}
PS: 之前在做server端的时候,做了些AsynInvoke的东西,还有一些回调,状态什么的。由于做的很浅,好多东西没掌握住,时间一长也遗忘了很多。
现在通过这个机会,把基本委托和事件掌握了,不过高级的应用还得靠以后多多练习,多做一些这方面的东西。