通过将TEdit输入与整数值进行比较来验证TEdit输入

时间:2015-04-20 09:47:06

标签: delphi delphi-xe2

我开发了一个随机创建两个整数然后添加它们的应用程序。两个整数的总和必须由用户计算并输入TEdit。 当我使用if语句来验证答案时(在TEdt中)我得到一个错误。 代码剪断了:

answer := int1+int2;
UserAnswer:=StrToInt(edtAnswer.Text);
if(UserAnswer=answer)then 
   lblRemark.Caption:= 'Correct Answer';  

运行应用程序时,我得到一个convertError"错误...不是一个有效的整数"。

2 个答案:

答案 0 :(得分:3)

StrToInt遇到无法转换为整数的字符串时,会引发异常。 documentation说:

  

如果S不代表有效号码,StrToInt会引发EConvertError例外。

你可以抓住那个例外。

try
  Value := StrToInt(Str);
except
  on EConvertError do
    // handle conversion error
end;

然而,这是相当混乱的代码。作为一个广泛的规则,例外应该是例外。它们不应该是程序正常流程的一部分。另一个广泛的规则是你不应该处理异常。让它们向上传播到可以处理它们的东西。

所以,如果我们违反这两条规则,我们怎能做得更好?好吧,使用TryStrToInt。这是一个返回Boolean的函数,用于指示转换是否成功。代码将如下所示:

if TryStrToInt(Str, Value) then
  // handle conversion success by using Value
else
  // handle conversion error

答案 1 :(得分:0)

假设Int1和Int2对用户来说是“合理的”(例如只有正面),你也可以使用

值:= StrToIntDef(Str,-1 {或其他非法值});

使代码稍微简单一些。