zoukankan      html  css  js  c++  java
  • 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的东西,还有一些回调,状态什么的。由于做的很浅,好多东西没掌握住,时间一长也遗忘了很多。

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




  • 相关阅读:
    Linux线程(一)
    模板(一)
    C++基础(八)
    C++基础(七)
    C++基础(六)
    C++基础(五)
    2.C#基础(二)
    1.C#基础(一)
    2.给出距离1900年1月1日的天数,求日期
    网络协议破解 SMTP
  • 原文地址:https://www.cnblogs.com/leon032/p/2260666.html
Copyright © 2011-2022 走看看