需求分析:需要做一款可以通过Winform 自己绘制的月历,原因是可以通过这种方法进行在月历下制作日程,如图所示:
一、制作须知:
1、需要用PictureBox将表格组合起来,并且在PictureBox上面增加Label
2、Label的作用是为了显示切换月份的时候需要重新对Label赋值
3、需要编写读取每年每月当天有多少天,以及每个月的1号对应的是星期几
二、制作步骤:
1、新建一个Winform,添加两个Combox用于获取某年某月
2、添加PictureBox ,按照图示所示将控件组合起来
3、在所有的PictureBox(灰色部分)上,新建Label,初始化的时候默认使得 label.text = "",即不显示
4、新增一个测试按钮,注册一个事件
int currentYear = Convert.ToInt32(comboBox1.Text.ToString());
int currentMonth = Convert.ToInt32(comboBox2.Text.ToString());
int X, Y;
X = WhatDay(currentYear, currentMonth);//得出某年某月的第一天是星期几
Y = EveryMonthDays(currentYear, currentMonth);//得出某年某月的天数
SetValue(currentYear, currentMonth); //将当前的信息传入自定义函数
4、得出星期几
public int WhatDay(int currentYear, int month)
{
int num;
int totalDays = 0;
for (int i = 1900; i < currentYear; i++)
{
if (IsLeapYear(i))
{
totalDays += 366;
}
else
{
totalDays += 365;
}
}
for (int j = 1; j < month; j++)
{
totalDays += EveryMonthDays(currentYear, j);
}
num = totalDays % 7;
return num + 1;
}
5、得出天数
public int EveryMonthDays(int year, int month)//判断某年每个月的天数
{
int i = month;
int monthDay;
if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12)
{
monthDay = 31;
}
else if (i == 4 || i == 6 || i == 9 || i == 11)
{
monthDay = 30;
}
else if (i == 2 && IsLeapYear(year) == true)
{
monthDay = 29;
}
else
{
monthDay = 28;
}
return monthDay;
}
6、编写SetValue(参数1,参数2)自定义函数
这个函数主要是为了将得到的4,5 的结果,并通过遍历的方法,将值赋值给Label
以上;需要源码请发信息