2-14  DataTimePicker控件<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

u 本节学习目标:

n 了解DataTimePicker控件的属性

n 学习DataTimePicker控件如何显示时间之差

    <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2-14-1  简介

如果希望应用程序能够使用户可以选择日期和时间,并以指定的格式显示该日期和时间,可以使用 DataTimePicker 控件。 DataTimePicker 控件用于选择日期和时间,与 Monthcalendar 控件不同, DataTimePicker 控件只能够选择一个时间段。一个基本的 DataTimePicker 控件如图 2-44 所示:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

2-44  DataTimePicker控件实验布局

    2-14-2  DataTimePicker控件的属性

DataTimePicker 控件主要的属性如表 2-14 所示:

属性

说明

showcheckbox

是否在控件中显示复选框,当复选框为选中时候,表示未选择任何值。

checked

showcheckbox TRUE时候,确定是否选择复选框。

showupdown

改为数字显示框,不再显示月历表。

value

当前的日期(年月日时分秒)

2-14 DataTimePicker控件的属性

    2-14-3  DataTimePicker控件实践操作

1. 案例学习:DataTimePicker控件显示时间之差

1 )从工具箱之中拖放两个 DataTimePicker 控件,若干 Label 标签,如图 2-45 所示进行布局。

2-45  DataTimePicker控件实验布局
2 )具体功能的实现见下面的编码部分:

         /// <summary>

        /// 初始化事件时候,分别显示选择日期的日期和周以及时间差信息

        /// </summary>

        private void Form008_Load(object sender, EventArgs e)

        {

        label3.Text = "选择日期是本年度第" + dateTimePicker1.Value.DayOfYear.ToString() + "天";

            //学习如何从dateTimePicker控件内获取选择天为一年的第几天。

            label4.Text = "选择日期是本周" + dateTimePicker1.Value.DayOfWeek.ToString();

            //学习如何从dateTimePicker控件内获取选择天为一年的第几周。

            label5.Text = "两个日期之差是:" + Convert.ToString(dateTimePicker2.Value.DayOfYear - dateTimePicker1.Value.DayOfYear) + "天";

            //求两个选择的日期之差

        }

         /// <summary>

        /// 当dateTimePicker1的时间发生变化时候,执行下面代码

        /// </summary>

        private void dateTimePicker1_ValueChanged(object sender, EventArgs e)

        {

            label5.Text = "两个日期之差是:" + Convert.ToString(dateTimePicker2.Value.DayOfYear - dateTimePicker1.Value.DayOfYear) + "天";    //求两个选择的日期之差

        }

         /// <summary>

        /// 当dateTimePicker2的时间发生变化时候,执行下面代码

        /// </summary>

        private void dateTimePicker2_ValueChanged(object sender, EventArgs e)

        {

            label5.Text = "两个日期之差是:" + Convert.ToString(dateTimePicker2.Value.DayOfYear - dateTimePicker1.Value.DayOfYear) + "天";    //求两个选择的日期之差

        }

3 )代码排错。

如果选择的日期都是同一年的不同两天,则通过求某天是一年的第几天,然后求差的方式是可以争取计算出两个日期之差的。但是如果第一天日期为 2009 1 1 ,另一天为 2008 12 31 的话,我们知道其日期差为 1 天,但是通过我们的程序计算就会得出 365 天的错误值。更正代码如下:

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)

        {

            DateTime d1 = dateTimePicker1.Value;

            DateTime d2 = dateTimePicker2.Value;

            TimeSpan d3 = d2.Subtract(d1);

          //注意:TimeSpan类型表示一个时间间隔类型,Subtract方法可以求出两个事件准确的日期差。

            label5.Text = "两个日期之差是:" + Convert.ToString(d3.TotalDays) + "天";

        }

        private void dateTimePicker2_ValueChanged(object sender, EventArgs e)

        {

            DateTime d1 = dateTimePicker1.Value;

            DateTime d2 = dateTimePicker2.Value;

            TimeSpan d3 = d2.Subtract(d1);

        //注意:TimeSpan类型表示一个时间间隔类型,Subtract方法可以求出两个事件准确的日期差。

            label5.Text = "两个日期之差是:" + Convert.ToString(d3.TotalDays) + "天";

        }