使用DateTimePicker CustomFormat MMM-yyyy时避免不可表示的DateTime

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,然后尝试使用键盘更改月份.

Han*_*ant 5

只需将其初始化为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)