You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 18:45:00