为什么我的程序在 C# 中出现未处理的异常时不会返回到丢失的变量框

问题描述

当我运行程序时,我故意将其中一个变量留空,这样我就可以得到 MessageBox.Show();,表明您不能忘记任何变量,否则程序将不会计算最终输出的结果。>

但是当我点击确定时,应用程序仍然计算结果(这是错误的,因为缺少一个变量)。

我使用 TBPRECIO.Focus(); 返回丢失的变量,但没有它它仍然完成。

private void ENTradAS()
{
    try
    {
        PRECIO = Convert.Todouble(TBPRECIO.Text);
        CANTIDAD = Convert.Todouble(TBCANTIDAD.Text);
        CATEGORIA = Convert.Todouble(TBCATEGORIA.Text);
    }
    catch
    {
        MessageBox.Show("there cannot be any empty variable");
        TBPRECIO.Focus();
    }
}

解决方法

您是否尝试过使用 if-else 语句?

      if(TBPRECIO.Text==""||TBCANTIDAD.Text==""||TBCATEGORIA.Text){ 
    MessageBox.Show("there cannot be any empty variable");
                TBPRECIO.Focus();
     
    }
     else{
     //Your Condition
    }
,

System.Convert.ToDouble 如果值为 null 会成功,但如果它是空字符串则会失败。具有 Text 属性的表单控件(无论是 winform 还是 webform)从不返回 null。

如果您的对象不是控件,您可能会得到一个空值而不是空字符串。无论如何,您的错误信息过于笼统,实际上具有误导性。

const msgSuffix = “ cannot be empty and must be a number”
double pr =0,cd=0,ca=0;
if ((!double.TryParse(TBPRECIO.Text,out pr)) || string.IsNullOrEmpty(TBPRECIO.Text)) {
     MessageBox.Show($"TBPRECIO{msgSuffix}");
     TBPRECIO.Focus();
}
else if ((!double.TryParse(TBCANTIDAD.Text,out cd)) || string.IsNullOrEmpty(TBCANTIDAD.Text))
   {
     MessageBox.Show($"TBCANTIDAD{msgSuffix}");
     TBCANTIDAD.Focus();
}
else if((!double.TryParse(TBCATEGORIA.Text,out ca)) || string.IsNullOrEmpty(TBCATEGORIA.Text))){
     MessageBox.Show($"TBCATEGORIA{msgSuffix}");
     TBCATEGORIA.Focus();
}
else {
    PRECIO = pr;
    CANTIDAD = cd;
    CATEGORIA = ca;
}

现在,您会收到一条错误消息,其中提到了正确的字段并准确描述了情况,从而使其更加有效。

,

"Focus()" 不会妨碍其他代码的执行。它只是将键盘焦点放在 TBPRECIO TextBox 控件上。 如果您希望某些计算代码不执行,则必须在计算代码的开头放置一个前提条件检查“are-all-valuese-entered-and-valid”。

如何开始/触发计算?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...