C#中TextBox删空内容后按退格触发System.FormatException如何修复
问题触发原因
错误的核心是未对文本框输入做合法性校验就直接执行数值转换:
- 当你把
txt_amount的内容删至完全为空时,文本框会触发绑定的文本变更事件(一般是TextChanged),自动执行你贴出的这段校验代码 - 此时
txt_amount.Text是空字符串,代码中直接执行double.Parse(txt_amount.Text)时,由于double.Parse方法不支持将空字符串、非数字字符串转换为浮点数,就会直接抛出System.FormatException格式错误 - 这个错误和退格键本身没有直接关系:只要
txt_amount输入了无法转成数值的内容(空值、字母、特殊符号)触发这段逻辑,都会报同样的错,退格键只是刚好触发了空值的场景而已
修复方案
把无安全校验的double.Parse替换为容错性更强的double.TryParse方法,在数值转换成功后再执行比对逻辑,避免无效输入直接触发异常:
double.TryParse和double.Parse的核心区别是,前者不会因为无效输入直接抛异常,而是返回布尔值表示转换是否成功,转换后的结果通过输出参数带出- 对
txt_amount的输入值做安全转换,转换失败时直接给出输入无效的提示,不执行后续的金额比对 - 对全局变量
Global.Allowance也做同样的安全转换,避免常量本身格式异常引发的连带报错
修复后的参考代码:
if (cb_type.Text == "Deposit") { // 安全解析用户输入的金额,输入无效时直接走提示逻辑 if (!double.TryParse(txt_amount.Text, out double inputAmount)) { txt_amount.ForeColor = Color.Red; btn_submit.Enabled = false; lbl_amount.Text = "Please enter a valid amount"; return; } // 安全解析剩余额度配置 if (!double.TryParse(Global.Allowance, out double leftAllowance)) { btn_submit.Enabled = false; lbl_amount.Text = "System allowance config error"; return; } // 两个值都有效时再做大小判断 if (inputAmount > leftAllowance) { txt_amount.ForeColor = Color.Red; btn_submit.Enabled = false; lbl_amount.Text = "Amount Exceeds Allowance Left"; } else { lbl_amount.Text = "Amount:"; txt_amount.ForeColor = Color.Black; btn_submit.Enabled = true; } }
内容的提问来源于stack exchange,提问作者adrian38
相关产品推荐
相关产品推荐

