以编程方式更改日期时间选取器的值不会更新 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只是没有更新,但没有做任何事情。

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

谢谢你的时间。

以编程方式更改日期时间选取器的值不会更新 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。

这可能是

因为DateTimePickerChecked属性已设置为 false

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

另一方面,显然在这种情况下,您设置Value会有所不同。如果使用表单的 Load 事件进行设置,则显示的日期时间将是Value已设置的日期时间,因为(?) Checked将自动更改(返回)为true,这与从 UI 更改日期时间/Value的行为一致。

但是,如果在窗体的构造函数中设置Value,则Checked将保持不变,因此显示的日期时间 (?) 不是Value以编程方式设置的时间。(但是如果您检查Value例如 MessageBox.Show(),您将看到您设置的内容确实存储在属性中。