2017-06-09 12 views
2

私はいつも苦労しています。私は多くの計算のためにDateTimePickerの値を中継するアプリケーションを持っています。日付は通常このコントロールに入力され、ユーザーは1桁の日または月を先頭にゼロ(9/9/17または10/6/17)を付けずに入力し、コントロールが日付を完了します。これはValidatingValidatedLeaveValueChangedなどのイベントで発生したときDateTimePickerの値は1桁の数字を入力すると更新されません

はしかし、DateTimePicker.Valueは更新する前に、プレビュー値を反映しています。

たとえば、コントロールでは日付がDateTime.Today(06/09/2017)に設定され、ユーザーは値をプレビュー月に先行ゼロ(5/09/2017)なしで入力します。この場合、予告されたイベントでは、DateTimePicker.Valueはまだ変更されていますが、06/09/2017になります。ユーザーが先行ゼロ(05/09/2017)で日付を入力すると、値がイベントで正しく更新されることを明確にすることが重要です。

値が正しく更新され、このイベントの後で値を検証すると(つまり、ユーザーがボタンをクリックすると)、更新された値が表示されます。しかし、これは必要なものではありません。

次の例では、正しい値に依存する別のコントロールが間違って更新されます。

private void nochesFormattedTextBox_Leave(object sender, EventArgs e) 
{ 
    fechaFinDateTimePicker.Value = fechaDateTimePicker.Value.AddDays(nochesFormattedTextBox.Text != "" ? int.Parse(nochesFormattedTextBox.Text) : 0); 
} 

助けが必要ですか?

答えて

0

これは完全に正常です。これらのイベントは、実際の値がコントロールで更新される前に発生します。変更イベントを使用することをお勧めします。 ValidatedはValidatingイベントの後に起動され、常にデータが有効であることを確認します。途中でバリデーションを実装する必要はありません...バリデーションは常に開始されます。変更の問題は、値が間違っている可能性があり、データが有効ではないためです。それで、あなたはValidatedを使うべきです。

+0

実際には 'Validated'イベントも発生します。しかし、このソリューションは 'ValueChanged'イベントを使用していました。ありがとう! –

関連する問題