C# WinForm开发系列之DataTimePicker控件显示月份的限制和关于DataTimePicker和monthCalendar的样式设置问题

来源:互联网 发布:linux查看hba卡型号 编辑:程序博客网 时间:2024/05/20 18:41

一.首先,在创建的窗体拖入一个dateTimePicker控件,如图1所示:


图1

在Form3窗体加入如下代码控制月份的显示(本例为只显示本月和下个月份时间):

  private void Form3_Load(object sender, EventArgs e)
  {
          this.dateTimePicker1.Value = DateTime.Today; 
            //取得本月第一天日期時間
          DateTime dtimeMin = DateTime.Parse(DateTime.Now.ToString("yyyy/MM/01 00:00:00"));
            
          //取下个月最后一天日期时间
          DateTime dtimeMax = DateTime.Parse(DateTime.Today.ToString("yyyy/MM/0123:59:59")).AddDays(-1).AddMonths(2);

          //設定可選擇的日期上限
          this.dateTimePicker1.MinDate = dtimeMin;

          //設定預設顯示的日期下限
          this.dateTimePicker1.MaxDate = dtimeMax;
  }

运行效果如图2,3所示:


图2


图3


二.在使用DateTimePicker和MonthCalendar这两个控件的时候,发现无论如何设置控件的各种颜色均不起作用,无论是在Property窗口里设置

还是代码中设置,如图4所示:


图4


图5

代码设置如:

  //设置控件的TitleBackColor属性,使控件的标题背景为蓝色
  monthCalendar1.TitleBackColor = System.Drawing.Color.Blue;
  //设置控件的TrailingForeColor属性,使控件其他日期的颜色为红色
  monthCalendar1.TrailingForeColor = System.Drawing.Color.Red;
  //设置控件的TitleForeColor属性,使标题上的文字为黄色
  monthCalendar1.TitleForeColor = System.Drawing.Color.Yellow;

窗口设置如图6所示:

  //设置控件的TitleBackColor属性,使控件的标题背景为蓝色
  monthCalendar1.TitleBackColor = System.Drawing.Color.Blue;
  //设置控件的TrailingForeColor属性,使控件其他日期的颜色为红色
  monthCalendar1.TrailingForeColor = System.Drawing.Color.Red;
  //设置控件的TitleForeColor属性,使标题上的文字为黄色
  monthCalendar1.TitleForeColor = System.Drawing.Color.Yellow;


这是因为:当启动了Visual Style之后,我们不能改变MonthCalendar的字体和背景颜色,Windows会根据系统设置选择合适的颜色进行绘制,他是通过Winforms发送MCM_SETCOLOR消息来改变MonthCalendar的颜色的。 

解决方法:如果通过Program.CS中将Application.EnableVisualStyles()注释掉的话,就可以改变颜色了,但那会很丑陋的

注释下一行代码就可以了: 

//Application.EnableVisualStyles();

效果如图7所示:


图7

0 0