7

事实:

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

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

4

6 回答 6

4

我发现这里有什么问题。

仅当控件可见时,该Value属性才会设置新值。DateTimePicker否则命令被忽略。

测试用例:

不起作用:

 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);

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

于 2009-11-18T00:40:09.677 回答
3

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

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

于 2014-11-19T19:06:57.187 回答
1

我对这个问题的丑陋解决方法包括在更改其值之前设置激活 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);
于 2009-12-11T19:58:00.890 回答
0

DateTimePicker 在存储和检索其值方面存在一些问题。将值绑定到不可为空的 DateTime 时遇到了麻烦 - 我不时收到 NullReferenceExeptions。不知道为什么或何时。它有时只是发生并使应用程序崩溃。

于 2009-10-24T15:12:46.070 回答
0

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

于 2009-11-12T21:51:08.417 回答
0

如果你不能让它工作,你总是可以尝试使用不同的选择器。Any+Time(TM) Datepicker/Timepicker AJAX Calendar Widget从关联的字段中提取其值,因此,如果您使用值初始化字段,或将字段更改为具有值(例如在 onload 中),那么这就是您'将在显示选择器时获取。如果您遇到问题,只需通过联系页面提交消息,我们会尽快解决。

于 2010-04-23T14:20:18.097 回答