在 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 事件仅在分配初始值后才绑定(bind)到控件):
this.dateTimePicker_Time.Checked = this.Settings.dateTimePicker_Checked;
if (this.Settings.dateTimePicker_Time != null)
{
this.dateTimePicker.Value = this.Settings.dateTimePicker_Time;
}
this.dateTimePicker.ValueChanged += new System.EventHandler(this.dateTimePicker_ValueChanged);
问题
如果选中 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 属性数据绑定(bind)到应用程序设置,但结果与上面“手动”执行操作相同。
最佳答案
当您在构造函数中时,控件的某些设置尚未准备好。您找到了其中一项设置。
尝试将恢复代码移至表单的 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);
}
关于c# - 当未选中 DateTimePicker 时(在开始时间),DateTime 值未分配给 DateTimePicker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46474901/