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

问题描述 投票:0回答:2

我想在表单打开时更改 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 没有更新,但实际上没有执行任何操作。

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

感谢您的宝贵时间。

c# winforms datetimepicker
2个回答
1
投票

我也有类似的问题。我在 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。


1
投票

这可能是因为

Checked
DateTimePicker
属性已设置为
false

当它的

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

另一方面,显然在这种情况下,您设置

Value
的位置会产生影响。如果用表单的
Load
事件设置,则显示的日期时间将是
Value
设置的日期时间,因为(?)
Checked
会自动更改(返回)为
true
,这是一致的与您从 UI 更改日期时间 /
Value
的行为。

但是,如果您在表单的构造函数中设置

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

© www.soinside.com 2019 - 2024. All rights reserved.