[习题]输入自己的生日(年/月/日)#2 -- 日历(Calendar)控件的时光跳跃,一次跳回五年、十年前?--TodaysDate属性、VisibleDate属性

原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/10/calendar_visibledate_birthday_dropdownlist.aspx

 


上一篇文章:[习题]输入自己的生日(年//日)-- 日历(Calendar)控件的时光跳跃,一次跳回五年、十年前?--TodaysDate属性、VisibleDate属性

http://www.dotblogs.com.tw/mis2000lab/archive/2011/05/30/calendar_todaysdate.aspx

 

这个习题可以当成「上集」  Ch.3 日历控件的补充范例。

补充这样的功能:

      

 

上图的「出生」,如果要包含一百年的选项

我们没法自己动手慢慢添加子选项,必须靠写程序完成。

 

如何控制年份呢?

    请看 System.DateTime里面就有很多方法可用。

    例如 .AddYear()方法,您可以用 -1来减去一年,请看 http://msdn.microsoft.com/zh-tw/library/system.datetime.addyears.aspx

 

        for (int i = 0; i < 101; i++)

        {

            //== 方法一 ==:

            //int myYear = System.DateTime.Now.Year - i;

            //DropDownList1.Items.Add(myYear.ToString());

 

            //== 方法二 ==:

            DropDownList1.Items.Add(System.DateTime.Today.AddYears(-i).ToString("yyyy"));

        }

        修正建议:把 System.DateTime移到for 循环外面

                         避免每一次跑循环都要调用 Now() 或 .AddYear()方法,以节省资源。

 

 

 

另外一个重点,就是「制订日历控件呈现的那一年、那一月份」

使用日历控件的VisibleDate」属性会比「TodaysDate」属性更好。

MSDN里面有提到:

      如果日历控件的 VisibleDate属性未设定,所指定的日期 TodaysDate属性会决定哪个月份会显示在Calendar控件。

 

        //== 方法一 ==:

        //Calendar1.TodaysDate = new DateTime(Convert.ToInt32(DropDownList1.SelectedValue), Convert.ToInt32(DropDownList2.SelectedValue), 1);

        //== DateTime里面的日期(//),只能接受「整数」。

 

        //== 方法二 ==:

        //**** 建议改用 .VisibleDate属性 更好。

        //**** 只会出现「当月月份」!

        Calendar1.VisibleDate = new DateTime(Convert.ToInt32(DropDownList1.SelectedValue), Convert.ToInt32(DropDownList2.SelectedValue), 1);

        //== DateTime里面的日期(//),只能接受「整数」。

 

使用 .VisibleDate属性时,当月份的日期不会「预设」被选定,画面也好看一点。

 

 

 

这是上课的补充范例,

很多「初学者」以为自己不会写程序

后来我发现他们是不会用字符串函数、不会用日期与时间的相关函数

 

未必是「基础的 if / for / while 语法」不会用,毕竟以前在学校多少都有学过一点点

 

 

 

 

 

你可能感兴趣的:(calendar)