DateTimePicker默认值:如何避免它?

时间:2009-09-09 15:52:48

标签: c# datetimepicker

事实:

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

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

6 个答案:

答案 0 :(得分: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);

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

答案 1 :(得分:3)

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

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

答案 2 :(得分: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);

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

如果无法使用它,您可以尝试使用其他选择器。 Any+Time(TM) Datepicker/Timepicker AJAX Calendar Widget从关联字段中提取其值,因此如果使用值初始化字段,或者将字段更改为具有值(例如在onload中),那么当选择器为时,您将获得该值显示。如果您遇到问题,只需通过联系页面提交一条消息,它将尽快解决。