Как сделать так, чтобы средство выбора даты и времени всегда содержало последний день месяца, показывая только месяц и год?

У меня есть DateTimePicker, который я установил для отображения только месяца и года следующим образом:

myDateTimePicker.Format = DateTimePickerFormat.Custom;
myDateTimePicker.CustomFormat = "MMMM yyyy";
myDateTimePicker.ShowUpDown = true;

Однако я хочу, чтобы значение даты всегда было последним днем ​​выбранного месяца, поэтому я установил DateTime в событии ValueChanged с использованием:

DateTime selectedDate = myDateTimePicker.Value;
DateTime lastDayOfMonth = new DateTime(
    selectedDate.Year,
    selectedDate.Month,
    DateTime.DaysInMonth(selectedDate.Year, selectedDate.Month));
myDateTimePicker.Value = lastDayOfMonth;

Проблема в том, что если у меня выбран месяц, например март, и я меняю месяц на февраль с помощью элементов управления вверх/вниз, я получаю следующую ошибку, прежде чем смогу обработать событие ValueChanged :

ArgumentOutOfRangeException was unhandled
Year, Month, and Day parameters describe an un-representable DateTime.

Это понятно, потому что дата была 31 марта, а сейчас она меняется на 31 февраля, что является неверной датой. Однако я хочу изменить его на 28 февраля (или 29 февраля).

Как мне этого добиться?

7
задан Warren Blumenow 14 March 2012 в 13:46
поделиться