![](/img/trans.png)
[英]DateTimePicker changing value doesn't fire value changed event - Winforms
[英]Changing value of DateTimePicker programatically doesn't update GUI
我想在我的表单打开时更改 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 只是没有更新但没有做任何事情。
有谁知道为什么这不起作用?
谢谢你的时间。
这可能是因为DateTimePicker
的Checked
属性已设置为false
。
当它的ShowCheckBox
属性为false
(默认值)时,无法判断DateTimePicker
是否为Checked
,因为由于某种原因(可能是故意的,也可能不是),当Checked
为 false 时,它不会像它那样变灰当ShowCheckBox
为true
时(更不用说显然不会显示复选框的事实)。
另一方面,显然在这种情况下,您设置Value
会产生影响。 如果用表单的Load
事件设置,显示的日期时间将是Value
设置的值,因为(?) Checked
会自动更改(返回)为true
,这与您更改的行为一致来自 UI 的日期时间/ Value
。
但是,如果您在表单的构造函数中设置Value
, Checked
将保持不变,因此显示的日期时间(?)将不是Value
以编程方式设置的值。 (但是,如果您使用例如MessageBox.Show()
检查Value
,您会看到您设置的内容确实存储在属性中。)
我有类似的问题。 我在 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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.