如何在c#.net windows应用程序中生成日历

我想在c#.net中生成日历以输入每日出勤率。我在网络中使用jquery日历用于类似目的。 有没有办法创建日历控件和获取点击事件来标记和显示其中的值。

谢谢

示例图片:

在此处输入图像描述

如果您有预算,我肯定会选择像Telerik的Scheduler Control这样的商业组件。 collections价格为999美元,之前从未使用过Telerik的控件,因此我不能自己推荐它们,但从长远来看,如果你可以在其他项目中重复使用这些组件,那么从长远来看它是值得的。

如果这不是一个选项,那么像你的例子一样简单的东西就很容易自己滚动。 我主要在WinForms中工作,所以这就是我要如何构建表单:

  1. 创建自定义控件以显示任何给定日期。 您需要在月份的顶角设置标签,并在标签上显示当天的文本(输入/输出时间)。 也许添加一个边框。
  2. 创建将包含日历的表单或控件
  3. 使用月份和年份控件添加停靠在顶部的工具条。 使用combobox或下拉按钮。
  4. 添加一个停靠在顶部的薄面板,并添加日期标签。 确定每列所需的宽度,并根据该位置定位标签。
  5. 添加FlowLayoutPanel并将Dock设置为Fill 。 这将包含’day’控件,它将从左到右,从上到下流动。

现在你需要在代码中工作,而不是设计师。 这可能在构造函数, Page_Load处理程序或在设置(或初始化)月份/年时调用的某个地方完成:

  1. FlowLayoutControl添加足够的空面板以填充月份的开头。 您可以通过new DateTime(year, month, 1).DayOfWeek找出要添加的new DateTime(year, month, 1).DayOfWeek可以找到该月的第一天所在的日期。 空面板应设置为与’day’控件相同的大小。
  2. 为该月中的每一天向FlowLayoutControl添加day控件。 使用DateTime.DayInMonth(year, month)查找所选月份中的天数,并在添加日期时将每个“日期”控件设置为日期(可能还有输入/输出数据)。
  3. 现在玩“日”控件和填充面板上的填充和边框,直到一切看起来正确。 您可以在设计器中添加一些测试’日’控件和面板以测试那里的布局,只需在设置代码中调用flowLayoutControl.Items.Clear()

这应该会产生一个可以动态显示任何月份的控件。 要添加考勤编辑function,请在“日期”控件或日历控件本身中设置“ Click处理程序(当您将“日期”控件添加到FlowLayoutControl ,并打开模式表单进行编辑或添加所选日期的进/出时间。

如果你想让day控件resize,动态注册包含控件的Resize事件,并将每天控件的宽度和高度设置为Math.Floor(control.Width / 7) (七天宽)和Math.Floor(control.Height / 5) (五周高)或类似的东西。

据我所知,市场上没有标准的时间表控制。 我建议你看一下DevExpress的XtraSchedule控件。