用c#写一个输入日期打印出日历的窗体
时间: 2023-11-13 17:03:23 浏览: 77
好的,我可以帮你设计一个简单的窗体程序,用于输入日期并打印出对应日期月份的日历。以下是代码实现:
```csharp
using System;
using System.Windows.Forms;
namespace CalendarApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// 获取用户输入的日期
DateTime selectedDate = dateTimePicker1.Value;
// 获取月份的第一天
DateTime firstDayOfMonth = new DateTime(selectedDate.Year, selectedDate.Month, 1);
// 获取月份的最后一天
DateTime lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddDays(-1);
// 计算需要显示的星期数
int weeksInMonth = (int)Math.Ceiling((double)lastDayOfMonth.Day / 7);
// 创建一个表格显示日历
DataGridView calendarGridView = new DataGridView();
calendarGridView.Dock = DockStyle.Fill;
calendarGridView.ReadOnly = true;
calendarGridView.AllowUserToAddRows = false;
calendarGridView.RowHeadersVisible = false;
calendarGridView.ColumnHeadersVisible = false;
// 添加列
for (int i = 0; i < 7; i++)
{
calendarGridView.Columns.Add("", "");
calendarGridView.Columns[i].Width = calendarGridView.Width / 7;
}
// 添加行
for (int i = 0; i < weeksInMonth; i++)
{
calendarGridView.Rows.Add();
calendarGridView.Rows[i].Height = calendarGridView.Height / weeksInMonth;
}
// 填充表格
int day = 1;
for (int i = 0; i < weeksInMonth; i++)
{
for (int j = 0; j < 7; j++)
{
if (day <= lastDayOfMonth.Day && (i > 0 || j >= (int)firstDayOfMonth.DayOfWeek))
{
calendarGridView.Rows[i].Cells[j].Value = day.ToString();
day++;
}
}
}
// 显示日历窗体
Form calendarForm = new Form();
calendarForm.Text = "Calendar";
calendarForm.ClientSize = new System.Drawing.Size(calendarGridView.Width, calendarGridView.Height);
calendarForm.Controls.Add(calendarGridView);
calendarForm.ShowDialog();
}
}
}
```
在这个窗体程序中,我们使用了DateTimePicker控件来获取用户输入的日期。我们创建了一个DataGridView控件来显示日历,并根据输入的日期计算出需要显示的月份的第一天和最后一天,以及需要显示的星期数。然后,我们将表格的列和行添加到DataGridView控件中,并填充表格。最后,我们创建了一个新的窗体来显示日历。
阅读全文