天天看点

实现C#.net下日期控件MonthCalendar的DoubleClick双击事件

需求:

      双击某个日期,需要弹出一个与该日期相应的窗口,来写日报,这时就需要日期的双击事件;

现状:

      在MonthCalendar控件的属性窗口中,并没有双击DoubleClick事件,查看MonthCalendar类,确实有MonthCalendar事件,但是经过测试没有作用

必须自己手动添加类似与功能的双击事件

方案:

       日期空间有MouseDown事件,就根据这个事件进行模拟:具体代码如下

public partial class DateControl : UserControl

    {

        int clickTime = 0;//单击次数

        TimeSpan timeSpan;

        DateTime startTime;

        DateTime endTime;

        DateTime firstTime;

        public delegate void DelegateDoubleClickDate(object sender,DateTime selectDate);

        public event DelegateDoubleClickDate EventDoubleClickDate;

        public DateControl()

        {

            InitializeComponent();

            this.timeSpan = new TimeSpan(0, 0, 0, 0, 500);//500为双击的间隔时间

            this.startTime = this.endTime = DateTime.Now;

        }

        private void dateMeno_MouseDown(object sender, MouseEventArgs e)

        {

            if (e.Button==MouseButtons.Left)

            {

                this.clickTime += 1;

                if (this.clickTime==1)

                {

                    this.startTime = DateTime.Now;

                    this.firstTime = this.dateMeno.SelectionEnd;

                }

                else if(this.clickTime==2)

                {

                    this.endTime = DateTime.Now;

                    TimeSpan tempSpan = this.endTime - this.startTime;

                    if (tempSpan<=this.timeSpan && this.firstTime==this.dateMeno.SelectionEnd)

                    {

                        if (this.EventDoubleClickDate!=null)

                        {

                            this.EventDoubleClickDate(this.dateMeno, this.dateMeno.SelectionEnd);

                        }

                    }

                    this.clickTime = 0;

                    this.startTime = this.endTime = DateTime.Now;

                }               

            }

        }

    }