我对 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。
现在从 DateTimePicker 中跳出。这将触发验证断点。请注意 DateTimePicker 现在的值是如何设置为 20 小时的日期。让该行再次执行并观察 DateTimePicker 的值。现在将值 os 02 改为小时(不是(!!) DateTime.Now 的值)
因此,在将值设置为 DateTime.Now 之后,它以某种方式将值更改为在 DateTimePicker 中输入的先前未完成的值。
怎么会这样,有什么办法可以解决这个问题吗?