[.Net]DateTimePickerでエラー
久しぶりに、プログラミングネタです。
【VisualBasic .Net 2012】

DateTimePickerを使っている時、以下の様なエラーになる場合があります。
Year、Month および Day パラメーターが表現できない DateTime を示しています。

多分ですが、CustomFormatで、"yyyy/MM"の様な日付を表示しない場合に起こります。
具体的には、月を変更した際、変更前の月の月末日が、変更後の月の月末日に存在しない時に起こります。
例えば、2016年3月(内部では31日) ⇒ 2016年2月(内部では31日のまま!?) といった場合です。
私の場合、Changeイベントをハンドリングできなかったので、DateTimePickerの派生クラスを作り、その中のChangeイベントで対応しました。

①DateTimePickerのユーザコントロールを作って、、、

②Changeイベントで、日付を明示的にプラスマイナス1するだけです。
Public Class NewDateTimePicker
Public Sub New()
AddHandler ValueChanged, AddressOf DateTimePickerEx_ValueChanged
Value = DateTime.Now
CustomFormat = "yyyy年MM月"
Format = System.Windows.Forms.DateTimePickerFormat.Custom
End Sub
Private Sub DateTimePickerEx_ValueChanged(sender As Object, e As EventArgs)
Value = Value.AddDays(Value.Day * -1 + 1)
End Sub
End Class

③後は、既存のコントロールを置換えるだけでOKです。

全然関係ないですが、.Net2012と2016、併用するのが細かいところで少し面倒、、、ショートカットとか違ったりするし、、、(´・ω・`)
【宣伝・・・(*´ω`)】

システム葵では、個人様向けでも企業様向けでも、パソコン修理から、パソコン設定、パソコンの使い方、LAN環境構築、ソフトウェア開発まで、様々な実績がありますので、困ったことがあれば、お気軽にご相談下さい。
【VisualBasic .Net 2012】

DateTimePickerを使っている時、以下の様なエラーになる場合があります。
Year、Month および Day パラメーターが表現できない DateTime を示しています。

多分ですが、CustomFormatで、"yyyy/MM"の様な日付を表示しない場合に起こります。
具体的には、月を変更した際、変更前の月の月末日が、変更後の月の月末日に存在しない時に起こります。
例えば、2016年3月(内部では31日) ⇒ 2016年2月(内部では31日のまま!?) といった場合です。
私の場合、Changeイベントをハンドリングできなかったので、DateTimePickerの派生クラスを作り、その中のChangeイベントで対応しました。

①DateTimePickerのユーザコントロールを作って、、、

②Changeイベントで、日付を明示的にプラスマイナス1するだけです。
Public Class NewDateTimePicker
Public Sub New()
AddHandler ValueChanged, AddressOf DateTimePickerEx_ValueChanged
Value = DateTime.Now
CustomFormat = "yyyy年MM月"
Format = System.Windows.Forms.DateTimePickerFormat.Custom
End Sub
Private Sub DateTimePickerEx_ValueChanged(sender As Object, e As EventArgs)
Value = Value.AddDays(Value.Day * -1 + 1)
End Sub
End Class

③後は、既存のコントロールを置換えるだけでOKです。

全然関係ないですが、.Net2012と2016、併用するのが細かいところで少し面倒、、、ショートカットとか違ったりするし、、、(´・ω・`)
【宣伝・・・(*´ω`)】

システム葵では、個人様向けでも企業様向けでも、パソコン修理から、パソコン設定、パソコンの使い方、LAN環境構築、ソフトウェア開発まで、様々な実績がありますので、困ったことがあれば、お気軽にご相談下さい。