C#中DateTimePicker遇'01/01/0001'值异常的处理咨询
解决DateTimePicker赋值时的ArgumentOutOfRangeException异常
要避免这个异常,核心是先验证读取到的日期值是否在DateTimePicker允许的范围内,再进行赋值,具体可以按以下步骤处理:
- 用
DateTime.TryParse安全转换读取到的字符串,避免转换失败抛出异常 - 转换成功后,检查日期是否在
dateTimePicker1.MinDate和dateTimePicker1.MaxDate之间(控件默认MinDate为1753年1月1日,MaxDate为9999年12月31日) - 如果日期无效或超出范围,给DateTimePicker设置一个合法的默认值(比如当前时间,或者控件的MinDate)
修改后的代码示例:
if (File.Exists(settingsFile)) { string[] lines = File.ReadAllLines(settingsFile); if (lines.Length > 0) { trackBarHours.Value = Convert.ToInt32(optionsfile.GetKey("trackbarhours")); trackBarMinutes.Value = Convert.ToInt32(optionsfile.GetKey("trackbarminutes")); trackBarSeconds.Value = Convert.ToInt32(optionsfile.GetKey("trackbarseconds")); savedMilliseconds = Convert.ToInt32(optionsfile.GetKey("milliseconds")); // 处理日期赋值的安全逻辑 string targetDateStr = optionsfile.GetKey("timetargetvalue"); if (DateTime.TryParse(targetDateStr, out DateTime targetDate)) { // 检查是否在DateTimePicker的有效范围内 if (targetDate >= dateTimePicker1.MinDate && targetDate <= dateTimePicker1.MaxDate) { dateTimePicker1.Value = targetDate; } else { // 超出范围时设为默认值,这里用当前时间,也可以换成dateTimePicker1.MinDate dateTimePicker1.Value = DateTime.Now; } } else { // 字符串无法转换为有效日期时设默认值 dateTimePicker1.Value = DateTime.Now; } richTextBox1.Text = optionsfile.GetKey("result"); } }
额外优化:如果你的optionsfile.GetKey方法在键不存在时会返回null或空字符串,可以先判断字符串是否为空,提前跳过无效转换:
string targetDateStr = optionsfile.GetKey("timetargetvalue"); if (!string.IsNullOrEmpty(targetDateStr)) { // 上面的转换和范围检查逻辑 } else { dateTimePicker1.Value = DateTime.Now; }
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

