DateTimePicker默认值:如何避免它?

事实:

  • 我有一个TabControl有2个标签,每个标签有2个DateTimePicker。
  • 在Load事件中,我设置了所有DTP的值。
  • 所有DTP都将ShowCheckBox设置为true,将Checked设置为false。
  • 当我执行程序时,第一个选项卡中的DTP是正常的,但是当我在第二个选项卡上检查DTP时,它们显示当前时间,而不是我在加载事件上设置的时间。

为什么会这样? 我怎么能避免呢?

我发现了问题所在。

如果DateTimePicker控件可见,则Value属性仅设置新值。 否则命令被忽略。

测试用例:

不起作用:

  this.picker = new DateTimePicker { Checked = false, Font = new System.Drawing.Font("Verdana", 9.75F), Format = System.Windows.Forms.DateTimePickerFormat.Time, Location = new System.Drawing.Point(5, 5), Name = "picker", ShowUpDown = true, Size = new System.Drawing.Size(120, 23), Visible = false }; this.Controls.Add(this.picker); this.picker.Value = this.picker.Value.Date.AddHours(1); this.picker.Visible = true; 

作品:

  this.picker = new DateTimePicker { Checked = false, Font = new System.Drawing.Font("Verdana", 9.75F), Format = System.Windows.Forms.DateTimePickerFormat.Time, Location = new System.Drawing.Point(5, 5), Name = "picker", ShowUpDown = true, Size = new System.Drawing.Size(120, 23), Visible = false }; this.Controls.Add(this.picker); this.picker.Visible = true; this.picker.Value = this.picker.Value.Date.AddHours(1); 

似乎与编程似乎添加选择器没有任何关系。

它与datetimepicker的Checked属性有关。 它通常设置为false。 至少这对我来说是个问题。

将datetimepicker.checked设置为true后,它确实从设置中检索了值。

我对此问题的丑陋解决方法包括在更改其值之前设置活动DTP所在的选项卡,如下所示:

 DateTime dat1 = DateTime.Today; DateTime dat2 = dat1.AddDays(1).AddSeconds(-1); dtpCreatedStart.Value = dat1; dtpCreatedEnd.Value = dat2; tbc.SelectTab(1); dtpModifiedStart.Value = dat1; dtpModifiedEnd.Value = dat2; tbc.SelectTab(0); 

DateTimePicker在存储和检索它的值时存在一些问题。 将Value绑定到不可为空的DateTime时遇到了麻烦 – 我不时得到NullReferenceExeptions。 不知道为什么或何时。 它有时刚刚发生并崩溃了应用程序。

我刚刚使用两个DateTimePickers遇到了同样的问题。 通过动态生成它们并将它们添加到表单中,我能够让它们都显示正确的值。

如果你无法使它工作,你总是可以尝试使用不同的选择器。 Any + Time(TM)Datepicker / Timepicker AJAX日历窗口小部件从关联字段中提取其值,因此如果使用值初始化字段,或更改字段以具有值(例如在onload中),那么这就是你当显示选择器时会得到。 如果您遇到问题,只需通过联系页面提交一条消息,它将尽快解决。