c#项目中遇到的add event 的一个小例子

很长时间没有做过客户端的东西了,最近在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的东西,还有一些回调,状态什么的。由于做的很浅,好多东西没掌握住,时间一长也遗忘了很多。

      现在通过这个机会,把基本委托和事件掌握了,不过高级的应用还得靠以后多多练习,多做一些这方面的东西。




原文地址:https://www.cnblogs.com/leon032/p/2260666.html