sgm*_*ore 2 datetimepicker winforms
假设我有一个带有MMM-yyyy CustomFormat的DateTimePicker,它已被初始化为2013年10月31日的值,这将显示为2013年10月.
如果选择控件的Oct部分并按向上或向下箭头,则会生成ArgumentOutOfRangeException - Year,Month和Day参数描述不可表示的DateTime.
据推测,它正在改变月份而不改变一天,9月和11月只有30天.请注意,如果CustomFormat为dd-MMM-yyyy,则不会引发任何错误,因为该日期会自动更改为30日.
如何避免或发现此错误?
我可以添加代码以确保DateTimePicker始终初始化为一个月的第一天,但我想允许用户从日历下拉列表中选择月份和日期,因此我需要应对用户手动操作的情况选择了31,然后尝试使用键盘更改月份.
只需将其初始化为10月1日.没有例外,仍然是相同的显示.
当然,您需要调整用户选择的值以保持在第1位:
private void dateTimePicker1_ValueChanged(object sender, EventArgs e) {
var dtp = (DateTimePicker)sender;
dtp.Value = new DateTime(dtp.Value.Year, dtp.Value.Month, 1);
}
Run Code Online (Sandbox Code Playgroud)