Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未选中DateTimePicker时,DateTime值未分配给DateTimePicker(在开始时间)_C#_Winforms_Datetimepicker - Fatal编程技术网

C# 未选中DateTimePicker时,DateTime值未分配给DateTimePicker(在开始时间)

C# 未选中DateTimePicker时,DateTime值未分配给DateTimePicker(在开始时间),c#,winforms,datetimepicker,C#,Winforms,Datetimepicker,在WinForms应用程序中,我有一个DateTimePicker 来自…Designer.cs的属性 this.dateTimePicker.AllowDrop = true; this.dateTimePicker.CustomFormat = "HH:mm:ss"; this.dateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom; th

在WinForms应用程序中,我有一个
DateTimePicker

来自
…Designer.cs的属性

        this.dateTimePicker.AllowDrop = true;
        this.dateTimePicker.CustomFormat = "HH:mm:ss";
        this.dateTimePicker.Format = System.Windows.Forms.DateTimePickerFormat.Custom;
        this.dateTimePicker.Location = new System.Drawing.Point(251, 12);
        this.dateTimePicker.Name = "DateTimePicker";
        this.dateTimePicker.ShowCheckBox = true;
        this.dateTimePicker.ShowUpDown = true;
        this.dateTimePicker.Size = new System.Drawing.Size(200, 28);
        this.dateTimePicker.TabIndex = 1;
每当其值更改时,我都会将所需内容保存到应用程序设置中(我对许多其他“字段”也做了类似的操作,这是我第一次遇到问题:

... this.Settings = [MyApplication].Properties.Settigns.Default.

private void dateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    this.Settings.dateTimePicker_Time = this.dateTimePicker.Value;
    this.Settings.dateTimePicker_Checked = this.dateTimePicker.Checked;
    this.Settings.Save();
}
当应用程序启动时,实际上,在主窗体的构造函数中,我恢复保存的值,如下所示(请注意,ValueChange事件仅在分配初始值后绑定到控件):

问题 如果选中了
DateTimePicker
,则会按预期分配
DateTime
值。 但是如果未选中
DateTimePicker
,则未分配
DateTime
值,似乎是分配了
DateTime.Now

因此,我也尝试了以下代码,但结果是一样的:

        this.dateTimePicker_Time.Checked = this.Settings.dateTimePicker_Checked;
        if (this.Settings.dateTimePicker_Time != null)
        {
            bool dateTimePicker_Checked = this.dateTimePicker.Checked;
            this.dateTimePicker.Checked = true;
            this.dateTimePicker.Value = this.Settings.dateTimePicker_Time;
            this.dateTimePicker.Checked = dateTimePicker_Checked ;
        }

        this.dateTimePicker.ValueChanged += new System.EventHandler(this.dateTimePicker_ValueChanged);
编辑
我已尝试将DateTimePicker属性数据绑定到应用程序设置,但结果与上面的“手动”操作相同。

当您在构造函数中时,控件的某些设置尚未就绪。您找到了其中一个设置

请尝试将还原代码移动到窗体的OnLoad覆盖。请注意,更改DateTimePicker的Value属性会将Checked属性设置为true,因此需要在设置Value属性后设置Checked属性:

protected override void OnLoad(EventArgs e) {
  base.OnLoad(e);
  if (this.Settings.dateTimePicker_Time != null) {
    this.dateTimePicker2.Value = this.Settings.dateTimePicker_Time;
  }
  this.dateTimePicker2.Checked = this.Settings.dateTimePicker_Checked;
}
此外,在OnFormClosing覆盖中只保存一次设置也更有意义:

protected override void OnFormClosing(FormClosingEventArgs e) {
  this.Settings.dateTimePicker_Time = dateTimePicker2.Value;
  this.Settings.dateTimePicker_Checked = dateTimePicker2.Checked;
  this.Settings.Save();
  base.OnFormClosing(e);
}

您,我将在本周末尝试测试。虽然我已经尝试将代码放在绑定到Load事件的Form_Load方法中,所以我希望OnLoad会给出相同的结果。@TTT我重复了您的问题。请记住,您发布的代码永远不会保存Checked=false,因为取消选中该框不会触发值更改这是一个令人震惊的事件。
protected override void OnFormClosing(FormClosingEventArgs e) {
  this.Settings.dateTimePicker_Time = dateTimePicker2.Value;
  this.Settings.dateTimePicker_Checked = dateTimePicker2.Checked;
  this.Settings.Save();
  base.OnFormClosing(e);
}