我想在窗体打开时更改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没有更新,但没有做任何事情。
有人知道为什么这行不通吗?
谢谢你的时间。
2条答案
按热度按时间ijnw1ujt1#
这可能是因为
DateTimePicker
的Checked
属性已设置为false
。当它的
ShowCheckBox
属性为false
时(默认值),则无法判断DateTimePicker
是否为Checked
,因为由于某种原因(可能是有意的,也可能不是),当Checked
为false时,它不会像ShowCheckBox
为true
时那样变灰(更不用说显然不会显示复选框的事实)。另一方面,显然在这种情况下,设置
Value
的位置会产生影响。如果使用窗体的Load
事件设置它,则显示的日期时间将是Value
设置的日期时间,因为将变更(?)Checked
自动(返回)到true
,这与从UI更改datetime /Value
的行为一致。但是,如果在窗体的构造函数中设置
Value
,Checked
将保持不变,因此显示的日期时间将(?)不是Value
通过编程设置的值。(但是如果使用MessageBox.Show()
检查Value
,您将看到您设置的值确实存储在属性中。)niknxzdl2#
我也遇到过类似的问题。我在winForms设计器中有2个字段:
我在constructor中初始化了对象值,如下所示:
在那之后,我给我的DateTimePicker对象赋值:
显然,“new DateTimePicker()”会导致值更改一次,并且同一方法中对DateTimePicker对象的进一步更改不会应用于UI。