C# 未选中DateTimePicker时,DateTime值未分配给DateTimePicker(在开始时间)
在WinForms应用程序中,我有一个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
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);
}