使用Arrow切换月份时Winforms DatetimePicker选择每月的第1天

时间:2018-04-05 17:40:39

标签: c# winforms datetimepicker

默认情况下,当我使用左箭头和右箭头切换日期时间选择器中的月份时,它会选择每月的第1天。

我不希望在我的情况下发生这种情况。除非用户选择任何其他日期,否则我希望具有相同的日期(在日期时间选择器打开之前选择的日期)。

1 个答案:

答案 0 :(得分:2)

这是设计行为。

在WinForms中

System.Windows.Forms.DateTimePicker依赖于Win32 API组件。这意味着很多控件呈现和交互代码都是本机代码,不能轻易地在.NET中进行更改。

您可以尝试something like this,继承DateTimePicker并覆盖WndProc处理程序,这样您就可以编写自己的WmDateTimeChange函数实现(original here)当你发现一个月的跳跃时,强制value的那一天到validTime的同一天。在Windows的未来版本中,这些修改很可能会中断,因此除了学习和试验之外的其他任何内容都不鼓励。

在WPF中

DatePicker使用Calendar控件来表示其弹出窗口。 当我们查看参考源时,从月视图调用操作OnNextClickOnPreviousClick时会发生什么情况,我们可以看到DiscardDayTime函数is called到{{3} }目标月份的第一个:

return new DateTime(d.Year, d.Month, 1, 0, 0, 0);

我建议将该控件子类化并使用代码覆盖这些事件处理程序以保留日期,并处理目标月份的天数少于当前月份的情况,但我担心{{1}用户代码无法访问Calendar实现使用的实例。就我所见,DatePicker也不会暴露这些内部事件。