0

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 に入力された以前の未完成の値に値が変更されます。

どうしてこうなったのですが、何かいい方法はないでしょうか?

4

2 に答える 2

0

Validating イベントの間、あなたが説明した動作を確認しましたが、validating イベントが完了すると、値が に設定されDateTime.Nowます。

Validating イベント自体の間にDateTimepicker コントロールの値を に設定したいと仮定するとDateTime.Now、値を 2 回設定すると値がDateTime.Now-に変更されることがわかりました。

dateTimePicker1.Value = DateTime.Now;

dateTimePicker1.Value = DateTime.Now;

于 2013-04-08T12:26:15.777 に答える