winforms 以编程方式更改DateTimePicker的值不会更新GUI

yshpjwxd  于 2022-12-23  发布在  其他
关注(0)|答案(2)|浏览(217)

我想在窗体打开时更改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没有更新,但没有做任何事情。
有人知道为什么这行不通吗?
谢谢你的时间。

ijnw1ujt

ijnw1ujt1#

这可能是因为DateTimePickerChecked属性已设置为false
当它的ShowCheckBox属性为false时(默认值),则无法判断DateTimePicker是否为Checked,因为由于某种原因(可能是有意的,也可能不是),当Checked为false时,它不会像ShowCheckBoxtrue时那样变灰(更不用说显然不会显示复选框的事实)。
另一方面,显然在这种情况下,设置Value的位置会产生影响。如果使用窗体的Load事件设置它,则显示的日期时间将是Value设置的日期时间,因为将变更(?)Checked自动(返回)到true,这与从UI更改datetime /Value的行为一致。
但是,如果在窗体的构造函数中设置ValueChecked将保持不变,因此显示的日期时间将(?)不是Value通过编程设置的值。(但是如果使用MessageBox.Show()检查Value,您将看到您设置的值确实存储在属性中。)

niknxzdl

niknxzdl2#

我也遇到过类似的问题。我在winForms设计器中有2个字段:

...
    private System.Windows.Forms.DateTimePicker von;
    private System.Windows.Forms.DateTimePicker bis;
...

我在constructor中初始化了对象值,如下所示:

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。

相关问题