限制C#窗体DateTimePicker日期的范围

3

在C#的WinForms应用程序中,是否可以限制用户从dateTimePicker选择哪些日期?

对我来说,基本原则是:我有一个包含5个项目的comboBox,根据用户选择的项目,我想限制用户可以选择的日期,并将不可用的日期变灰。

这种做法可行吗?


用户可以输入一个组合框中不存在的日期,还是只能从组合框中选择? - Sandy
你可能也想看一下MonthCalendar控件。详情请见:http://msdn.microsoft.com/zh-cn/library/f9a9k6dd.aspx - Merlyn Morgan-Graham
是的,必须选择某些内容,用户不能输入自己的数据。例如,如果用户选择第一个项目,则只能从dateTimePicker或monthCalender中选择“星期四”。 - YoBroJas
可能是重复问题:https://dev59.com/FXE95IYBdhLWcg3wUcRn - Otiel
到目前为止,还没有任何答案对我有用。 - YoBroJas
5个回答

10

使用 MinDateMaxDate 属性。

dateTimePicker.MinDate = DateTime.Now;
dateTimePicker.MaxDate = DateTime.Now.AddDays(15);

DateTimePicker
(在法语的Windows 7上呈现)


我已将属性设置为仅显示1个日历。例如,如果用户选择comboBox中的第一项,则只能从dateTimePicker或monthCalender中选择“星期四”。这可能吗? - YoBroJas
@user1077021:请参见 https://dev59.com/FXE95IYBdhLWcg3wUcRn。 - Otiel

1

您可以为C# WinForms DTP设置最小和最大日期,因此如果您希望这样做,那么可以使用MinValueMaxValue变量。您无法选择不允许的日期块。这是您必须自己添加的内容。有两种可能的方法:

  • 处理ValueChanged事件,然后验证所选日期。
  • 继承DTP类并在其中添加一些额外的功能。

1

DateTimePicker控件具有MaxDateMinDate属性。设置它们,您可以控制可选择的日期范围。目前在我的Windows XP上,使用Windows Classic主题时,不可选择的日期不会显示为灰色,但这可能因操作系统、主题等而异。如果您一定要将它们变灰,那么您将不得不子类化DateTimePicker控件并自己进行(或部分)绘制。


是的,必须选择某些内容,用户不能输入自己的数据。例如,如果用户选择第一个项目,则只能从dateTimePicker或monthCalender中选择“星期四”。 - YoBroJas
1
这改变了很多事情。你应该在问题中指明这一点。恐怕你别无选择,只能对DateTimePicker控件进行子类化并自己处理绘制,因为你不再是在谈论单个的最小-最大范围,而是在谈论多个范围。你还需要自己执行验证:如果用户选择了一个灰色的日期,你需要防止控件自行关闭。好吧——你可能不需要对控件进行子类化,你可能可以通过触发它的事件来解决问题。但这需要相当大量的工作。 - Mike Nakis

0

是的,至少MSDN是这么说的。请参见此处


0

你可以按照以下方式设置日期限制

dateTimePicker1.MinDate = DateTime.Today.AddDays(-2);
dateTimePicker1.MaxDate = DateTime.Today.AddDays(2);

在这些情况下,仅有5个可用日期可以供用户选择,其余日期不可选。您可以在组合框的selectedindex changed事件中设置这些值,并根据您的要求/逻辑进行限制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接