\\注意 winform窗口添加
\\RichTextBox作为控制台显示控件
\\GridContral控件需要DevExpress插件,可以用DataGridView代替
\\button控件
using System;
using System.Collections.Generic;using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Calendar_Demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//初始化
int newYear = 1900;
int newMonth = 1;
for(int i=0;i<10;i++){
comboBox1.Items.Add(newYear);
newYear += 1;
}
comboBox1.SelectedIndex = 0;
for (int i = 0; i < 12; i++)
{
comboBox2.Items.Add(newMonth);
newMonth += 1;
}
comboBox2.SelectedIndex = 0;
}
//将List日历放入DataTable中
DataTable Calendar(List<string> list)
{
//新建DataTable及列
DataTable dt = new DataTable("日历");
dt.Columns.Add("日", typeof(string));
dt.Columns.Add("一", typeof(string));
dt.Columns.Add("二", typeof(string));
dt.Columns.Add("三", typeof(string));
dt.Columns.Add("四", typeof(string));
dt.Columns.Add("五", typeof(string));
dt.Columns.Add("六", typeof(string));
for(int i = 0; i < 6; i++)
{
dt.Rows.Add();//增加新行
}
for (int i = 0; i < list.Count; i++)
{
int consult = i / 7;//行数
int remainder = i % 7;//该行第几列
dt.Rows[consult][remainder] = list[i];//给DataTable每行每列价值
}
return dt;
}
//输入年月,获取该list日历
List<string> CalendarList(string year,string months)
{
List<string> list = new List<string>();
int countDay = 0;//总天数
int month = 0;//所选这个月的天数
int nullNum = 0;
int inputYear = int.Parse(year);
int inputMonth = int.Parse(months);
//统计从1900到输入的年份的天数
for (int i = 1900; i < inputYear; i++)
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)//判断是否为瑞年
{
countDay += 366;
}
else
{
countDay += 365;
}
}
for (int i = 1; i < inputMonth; i++)
{
if (i == 2)
if (inputYear % 4 == 0 && inputYear % 100 != 0 || inputYear % 400 == 0)
countDay += 29;
else
countDay += 28;
else
{
if (i > 7 && i % 2 == 0 || i < 7 && i % 2 != 0)
countDay += 31;
else
countDay += 30;
}
}
if (inputMonth == 2)
if (inputYear % 4 == 0 && inputYear % 100 != 0 || inputYear % 400 == 0)
month = 29;
else
month = 28;
else
{
if (inputMonth > 7 && inputMonth % 2 == 0 || inputMonth < 7 && inputMonth % 2 != 0)
month = 31;
else
month = 30;
}
nullNum = countDay % 7 + 1;//占位为空
for (int i = 0; i < nullNum; i++)
{
list.Add("");
}
for (int i = 1; i <= month; i++)
{
list.Add(i.ToString());
}
return list;
}
//让日历显示到RichTextBox中
void Calendar(RichTextBox box, List<string> list)
{
richTextBox1.Clear();
box.AppendText("******************************************************\r\n");
box.AppendText("日\t一\t二\t三\t四\t五\t六");
for (int i = 0; i < list.Count; i++)
{
if (i % 7 == 0)
box.AppendText("\r\n");
box.AppendText(list[i] + "\t");
}
box.AppendText("\r\n");
box.AppendText("******************************************************\r\n");
}
//查看button
private void button1_Click(object sender, EventArgs e)
{
List<string> list = CalendarList(comboBox1.Text, comboBox2.Text);
Calendar(richTextBox1, list);
DataTable dt = Calendar(list);
gridControl1.DataSource = dt;//没有DevExpress插件,可以用DataGridView
}
}
}