以编程方式更改日期时间选取器的值不会更新 GUI
本文关键字:GUI 更新 选取 方式更 编程 日期 时间 | 更新日期: 2023-09-27 18:35:39
我想在窗体打开时更改 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 AM,但在实际 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。
因为DateTimePicker
的Checked
属性已设置为 false
。
当它的ShowCheckBox
属性为 false
(默认值)时,无法判断DateTimePicker
是否Checked
,因为出于某种原因(可能是故意的,也许不是),当 Checked
为 false 时,它不会像true
ShowCheckBox
时那样变灰(更不用说不会显示复选框的事实, 显然)。
另一方面,显然在这种情况下,您设置Value
会有所不同。如果使用表单的 Load
事件进行设置,则显示的日期时间将是Value
已设置的日期时间,因为(?) Checked
将自动更改(返回)为true
,这与从 UI 更改日期时间/Value
的行为一致。
但是,如果在窗体的构造函数中设置Value
,则Checked
将保持不变,因此显示的日期时间 (?) 不是Value
以编程方式设置的时间。(但是如果您检查Value
例如 MessageBox.Show()
,您将看到您设置的内容确实存储在属性中。