繁体   English   中英

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

[英]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 只是没有更新但没有做任何事情。

有谁知道为什么这不起作用?

谢谢你的时间。

这可能是因为DateTimePickerChecked属性已设置为false

当它的ShowCheckBox属性为false (默认值)时,无法判断DateTimePicker是否为Checked ,因为由于某种原因(可能是故意的,也可能不是),当Checked为 false 时,它​​不会像它那样变灰当ShowCheckBoxtrue时(更不用说显然不会显示复选框的事实)。

另一方面,显然在这种情况下,您设置Value会产生影响。 如果用表单的Load事件设置,显示的日期时间将是Value设置的值,因为(?) Checked会自动更改(返回)为true ,这与您更改的行为一致来自 UI 的日期时间/ Value

但是,如果您在表单的构造函数中设置ValueChecked将保持不变,因此显示的日期时间(?)将不是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM