C# 键入一位数字时,DateTimePicker值未更新onLeave
有一个问题我一直在努力解决。我有一个应用程序,在这个应用程序中,我使用C# 键入一位数字时,DateTimePicker值未更新onLeave,c#,winforms,visual-studio,datetimepicker,C#,Winforms,Visual Studio,Datetimepicker,有一个问题我一直在努力解决。我有一个应用程序,在这个应用程序中,我使用DateTimePicker值进行大量计算。日期通常在此控件中键入,用户键入不带前导零的单位数天或月(即9/9/17或10/6/17),控件完成日期 但是,当在验证、验证、离开、值更改等事件中发生这种情况时,日期时间选择器.Value会反映更新前的预览值 例如,控件将日期设置为DateTime.Today(2017年9月6日),用户键入值以预览不带前导零的月份(2017年9月5日)。在这种情况下,在前面提到的事件中,DateT
DateTimePicker
值进行大量计算。日期通常在此控件中键入,用户键入不带前导零的单位数天或月(即9/9/17或10/6/17),控件完成日期
但是,当在验证
、验证
、离开
、值更改
等事件中发生这种情况时,日期时间选择器.Value
会反映更新前的预览值
例如,控件将日期设置为DateTime.Today
(2017年9月6日),用户键入值以预览不带前导零的月份(2017年9月5日)。在这种情况下,在前面提到的事件中,DateTimePicker.Value
仍将是2017年9月6日,即使它已更改。需要澄清的是,如果用户键入带前导零的日期(2017年9月5日),则事件中的值会正确更新
该值已正确更新,如果我在此事件后验证该值(即,当用户点击按钮时),我可以看到更新的值。但这不是必须的
在以下示例中,另一个依赖于正确值的控件被错误更新
private void nochesFormattedTextBox_Leave(object sender, EventArgs e)
{
fechaFinDateTimePicker.Value = fechaDateTimePicker.Value.AddDays(nochesFormattedTextBox.Text != "" ? int.Parse(nochesFormattedTextBox.Text) : 0);
}
有什么帮助吗?这是完全正常的:这些事件是在控件中的实际值更新之前触发的。我建议您使用Change event或event better:Validated。Validated在Validating事件之后触发,并且您始终确保您的数据有效。顺便说一下,您不需要实现验证。。。验证总是被激发。更改的问题是值可能错误,导致数据无效。然后我想您应该使用Validated。它实际上也发生在
Validated
事件中。但是,解决方案是使用ValueChanged
事件。谢谢