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

支付金额文本框设为0时触发System.FormatException错误的代码问题求助

这个问题我之前也碰到过!核心原因是Convert.ToInt32对输入太苛刻——只要字符串不是有效的整数格式(比如空字符串、带字母的内容,甚至是输入0过程中短暂出现的空值),它就会直接抛出FormatException。当你修改支付金额为0时,大概率是先清空了文本框再输入0,这时候TextChanged事件会在文本框为空时触发一次,这时候txtPM.Text.Trim()是空字符串,转换自然失败。

解决这个问题的最佳方式是用安全转换方法int.TryParse,它不会抛出异常,而是通过返回值告诉你转换是否成功。下面是修改后的代码:

private void txtPM_TextChanged(object sender, EventArgs e)
{
    // 先尝试解析费用金额,确保标签内容是有效整数
    if (!int.TryParse(lblFee.Text.Trim(), out int feeAmount))
    {
        txtChange.Text = string.Empty;
        return;
    }

    // 再解析支付金额,处理空值或无效输入的情况
    if (!int.TryParse(txtPM.Text.Trim(), out int paymentAmount))
    {
        txtChange.Text = string.Empty;
        return;
    }

    // 计算找零,这里可以根据需求处理负数情况(比如提示金额不足)
    int change = paymentAmount - feeAmount;
    txtChange.Text = change.ToString();
}

补充几点细节:

  • int.TryParse的第一个参数是要转换的字符串,第二个out参数会存储转换后的整数(如果成功),返回值是bool类型,代表转换是否成功。
  • 我顺便给lblFee也加了转换检查,避免如果标签里的内容不是有效整数时也触发错误。
  • 如果需要处理支付金额小于费用的场景(比如找零为负数),可以加个判断,比如把找零设为0,或者弹出提示框提醒用户:
    int change = paymentAmount >= feeAmount ? paymentAmount - feeAmount : 0;
    // 或者加提示:
    // if (paymentAmount < feeAmount) MessageBox.Show("支付金额不足!");
    

这样修改后,不管你怎么修改支付金额(包括清空、输入非数字、输入0),都不会再抛出格式异常了。

内容的提问来源于stack exchange,提问作者Francis Daniel V. Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:35:16