我想在 c#.net 中生成日历以输入每日出勤。我在 web 中将 jquery 日历用于类似目的。有什么方法可以创建日历控件并获取点击事件来标记和显示其中的值。
谢谢
示例图片:
最佳答案
如果您有预算,我肯定会选择商业组件,例如 Telerik's Scheduler Control .该系列的售价为 999 美元,我以前从未使用过 Telerik 的控件,所以我自己不能推荐它们,但从长远来看,如果您可以在其他项目中重复使用这些组件,从长远来看,它是值得的。
如果那不是一个选项,那么像您的示例一样简单的事情将很容易实现。我主要在 WinForms 中工作,所以这就是我构建表单的方式:
- 创建一个自定义控件来显示任何给定的一天。您需要在右上角有一个标签来表示月份中的某一天,以及一个标签来显示当天的文本(进/出时间)。也许添加边框。
- 创建一个包含日历的窗体或控件
- 添加一个与月份和年份控件一起停靠在顶部的工具条。使用组合框或下拉按钮。
- 添加一个停靠在顶部的薄面板,并为日期添加标签。确定您希望每列的宽度并根据该宽度放置标签。
- 添加一个
FlowLayoutPanel
并将Dock
设置为Fill
。这将包含“天”控件,这些控件将从左到右、从上到下排列。
现在您需要在代码中工作,而不是设计人员。这可能在构造函数、Page_Load
处理程序或设置(或初始化)月/年时调用的某个地方完成:
- 向
FlowLayoutControl
添加足够的空面板以填充月初。您可以使用new DateTime(year, month, 1).DayOfWeek
找出要添加的数量,以找到该月的第一天。空白面板应设置为与“日”控件相同的大小。 - 为一个月中的每一天向
FlowLayoutControl
添加一个day
控件。使用DateTime.DayInMonth(year, month)
查找所选月份的天数,并根据您的日期(可能还有输入/输出数据)设置每个“天”控件重新添加它。 - 现在尝试在“日”控件和填充面板上填充和边框,直到一切看起来正确为止。您可以在设计器中添加一些测试“日”控件和面板以测试那里的布局,只需在设置代码中调用
flowLayoutControl.Items.Clear()
。
这应该会产生一个可以动态显示任何月份的控件。要添加出勤编辑功能,请在“天”控件或日历控件本身中设置一个 Click
处理程序(当您将“天”控件添加到 FlowLayoutControl
,然后打开模态窗体以编辑或添加所选日期的进出时间。
如果您希望日期控件动态调整大小,请注册包含控件的 Resize
事件并将每个日期控件的宽度和高度设置为 Math.Floor(control.Width/7)
(七天宽)和 Math.Floor(control.Height/5)
(五周高)或类似的东西。
关于c# - 如何在 c#.net windows 应用程序中生成日历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609046/