You need to enable JavaScript to run this app. C#触发未处理异常时未跳转回缺失变量输入框如何解决
优惠活动
大模型
产品
解决方案
定价
更多

C#触发未处理异常时未跳转回缺失变量输入框如何解决

C# 输入校验失败后终止后续计算逻辑解决方案

问题核心原因

  1. 你当前定义的ENTRADAS()方法为无返回值的void类型,调用该方法的上层逻辑无法感知是否出现了输入异常,所以会继续向下执行计算代码
  2. 使用try...catch捕获输入空值/格式错误属于不合理的异常使用场景,既会产生不必要的性能损耗,也无法准确定位到具体出错的输入框

最优修改方案

建议使用double.TryParse做输入校验,同时修改方法返回布尔值标识校验结果,还能实现出错时自动定位到对应输入框:

// 方法返回bool值,true代表全部输入校验通过,false代表存在无效输入
private bool ENTRADAS()
{
    // 逐个校验每个输入框的内容
    if (!double.TryParse(TBPRECIO.Text, out PRECIO))
    {
        MessageBox.Show("价格输入不能为空或格式错误");
        TBPRECIO.Focus();
        return false;
    }
    if (!double.TryParse(TBCANTIDAD.Text, out CANTIDAD))
    {
        MessageBox.Show("数量输入不能为空或格式错误");
        TBCANTIDAD.Focus();
        return false;
    }
    if (!double.TryParse(TBCATEGORIA.Text, out CATEGORIA))
    {
        MessageBox.Show("分类输入不能为空或格式错误");
        TBCATEGORIA.Focus();
        return false;
    }
    // 所有输入校验通过
    return true;
}

上层调用逻辑修改

在触发计算的位置(比如按钮点击事件中),先判断ENTRADAS()的返回结果,校验失败直接终止后续逻辑:

private void 计算按钮_Click(object sender, EventArgs e)
{
    // 校验失败直接返回,不执行后续计算
    if (!ENTRADAS())
    {
        return;
    }
    // 校验通过才执行后续计算逻辑
    // 你的原有计算代码写在这里
}

兼容原有try-catch写法的修改方案

如果你需要保留原有异常捕获的写法,只需要给方法增加返回值,上层加判断即可:

private bool ENTRADAS()
{
    try
    {
        PRECIO = Convert.ToDouble(TBPRECIO.Text);
        CANTIDAD = Convert.ToDouble(TBCANTIDAD.Text);
        CATEGORIA = Convert.ToDouble(TBCATEGORIA.Text);
        return true;
    }
    catch
    {
        MessageBox.Show("存在不能为空的变量");
        TBPRECIO.Focus();
        return false;
    }
}

内容的提问来源于stack exchange,提问作者Benjamin Villalona

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:30:05