C#触发未处理异常时未跳转回缺失变量输入框如何解决
C# 输入校验失败后终止后续计算逻辑解决方案
问题核心原因
- 你当前定义的
ENTRADAS()方法为无返回值的void类型,调用该方法的上层逻辑无法感知是否出现了输入异常,所以会继续向下执行计算代码 - 使用
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
相关产品推荐
相关产品推荐

