代码之家  ›  专栏  ›  技术社区  ›  Jhonny D. Cano -Leftware-

DateTimePicker默认值:如何避免它?

  •  7
  • Jhonny D. Cano -Leftware-  · 技术社区  · 15 年前

    事实:

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

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

    6 回复  |  直到 10 年前
        1
  •  4
  •   GONeale    15 年前

    我发现问题出在这里。

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

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

        2
  •  3
  •   Hugo Vale    10 年前

    它与DateTimePicker的选中属性有关。通常设置为假。至少这是我的问题。

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

        3
  •  1
  •   Jhonny D. Cano -Leftware-    15 年前

    我解决这个问题的丑陋方法是,在更改DTP的值之前,先激活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);
    
        4
  •  0
  •   kubal5003    15 年前

    DateTimePicker在存储和检索其值时遇到一些问题。我在将值绑定到不可为空的日期时间时遇到了问题-我不时地得到nullReferenceExecutions。不知道为什么或什么时候。有时候只是发生了,应用程序崩溃了。

        5
  •  0
  •   CACuzcatlan    15 年前

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

        6
  •  0
  •   Andrew M. Andrews III    14 年前

    如果你不能让它工作,你可以尝试使用不同的选择器。这个 Any+Time(TM) Datepicker/Timepicker AJAX Calendar Widget 从关联字段中提取其值,因此,如果用值初始化字段,或将字段更改为具有值(如在onload中),则显示选取器时将得到该值。如果你对此有问题,只需通过联系人页面提交一条消息,它将尽快得到解决。