DateTimePicker に問題があり、再現が非常に簡単で、コントロール自体のバグのように感じますが、何かを誤解していないことを確認したかったのです。
まず、このコードは非常に単純で、DateTimePicker を使用して WinForms アプリケーションを作成します (私たちのプロジェクトは .net 4.0 ですが、.net 4.5 で作成しようとしましたが、同じ問題です)。ピッカー自体には、「HH:mm」形式のカスタム形式があり、ShowUpDown も true に設定されています。次のような検証方法があります。
private void dateTimePicker1_Validating(object sender, CancelEventArgs e)
{
dateTimePicker1.Value = DateTime.Now;
}
その行にブレークポイントを設定します。
DateTimePicker からタブで移動して検証をトリガーできるように、アプリケーションに別のコントロールがあることを確認してください。
ここで、プログラムで DateTimePicker に移動し、時間フィールドなどに「202」と入力します。これにより、最初に 20 を書いたように見え、2 番目の "2" を書くと、今のところフィールドには 2 だけが表示されます。
DateTimePicker からタブで移動します。これにより、検証ブレークポイントがトリガーされます。DateTimePicker の値が現在、20 時間に設定された日付になっていることに注意してください。行を実行して、DateTimePicker の値をもう一度監視します。代わりに時間の値 os 02 (NOT(!!) DateTime.Now の値)
したがって、どういうわけか、値を DateTime.Now に設定した後、DateTimePicker に入力された以前の未完成の値に値が変更されます。
どうしてこうなったのですが、何かいい方法はないでしょうか?