我想在表单打开时更改 DateTimePicker 的值,因此在构造函数中我执行以下操作:
timePicker.Value = new DateTime(1999, 5, 5, 10, 10, 10); //Just picking a random date and time
如果我放置一个断点并查看 timePicker 的“值”,它确实是 1999 年 5 月 5 日上午 10:10:10,但在实际的 GUI 中,DateTimePicker 只是 DateTime.Now。
无论我尝试什么,GUI 都会显示 DateTime.Now 作为 timePicker 的值。
我尝试在 timePicker 上调用 Invalidate(),认为只是 GUI 没有更新,但实际上没有执行任何操作。
有人知道为什么这不起作用吗?
感谢您的宝贵时间。
我也有类似的问题。我在 winForms 设计器中有 2 个字段:
private System.Windows.Forms.DateTimePicker von;
private System.Windows.Forms.DateTimePicker bis;
我在构造函数中初始化了对象值,如下所示:
this.bis = new DateTimePicker();
之后,我为 DateTimePicker 对象分配了一个新值:
von.Value = DateTime.Parse((String)userAbsenceInfos["AbsenceFrom"]);
von.Refresh();
von.Show();
von.Update(); // I feel like Tobey Maguire in Spiderman Movie
显然
new DateTimePicker()
会导致值改变一次。并且在同一方法中对 DateTimePicker 对象的进一步更改不会应用于 UI。
这可能是因为
Checked
的 DateTimePicker
属性已设置为 false
。
当它的
ShowCheckBox
属性是 false
(默认)时,我们无法判断 DateTimePicker
是否是 Checked
,因为由于某种原因(也许是有意的,也许不是),当 Checked
是false,它不会像 ShowCheckBox
为 true
时那样变灰(更不用说显然不会显示复选框了)。
另一方面,显然在这种情况下,您设置
Value
的位置会产生影响。如果用表单的 Load
事件设置,则显示的日期时间将是 Value
设置的日期时间,因为(?) Checked
会自动更改(返回)为 true
,这是一致的与您从 UI 更改日期时间 / Value
的行为。
但是,如果您在表单的构造函数中设置
Value
,Checked
将保持不变,因此显示的日期时间(?)不是以编程方式设置的 Value
。 (但是,如果您检查 Value
,例如 MessageBox.Show()
,您将看到您设置的内容确实存储在属性中。)