键入单个数字时,DateTimePicker 值不会更新 onLeave

DateTimePicker value not updated onLeave when typing a single digit number

有个问题一直困扰着我。我有一个应用程序,我在其中依赖 DateTimePicker 值进行大量计算。日期通常在此控件中键入,用户键入没有前导零的单个数字天或月(即 9/9/17 或 10/6/17),控件完成日期。

但是,当这种情况发生在 ValidatingValidatedLeaveValueChanged 等事件中时,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);
}

有什么帮助吗?

这是完全正常的:在控件中更新实际值之前会触发这些事件。我建议您使用 Change 事件或更好的事件:已验证。 Validated 在 Validating 事件之后被触发,并且您始终确保您的数据有效。顺便说一句,您不需要实施验证......验证总是被解雇。 Change 的问题是值可能是错误的,导致数据无效。那我觉得你应该使用 Validated.