通常我会执行以下操作将字符串值保存到数据库中
DataModule.tbTableNumber.Value := StrToFloat(edtNumber.text);
现在问题出现在用户输入无法转换为数字的内容时。我怎么能阻止这个?一个人可以使用异常吗?我将如何编写此异常?
我正在使用Delphi XE2。
答案 0 :(得分:13)
最佳解决方案(恕我直言)是使用TryStrToFloat
:
procedure TForm1.Button1Click(Sender: TObject);
var
myfloat: double;
begin
if TryStrToFloat(Edit1.Text, myfloat) then
DataModule.tbTableNumber.Value := myfloat
else
ShowMessage('Incorrect value.');
end;
我不认为当错误是微不足道的时候使用try..except
并且实际上正如预期的那样使用{{1}}并不是特别“干净”。就像在这种情况下一样。
答案 1 :(得分:5)
您可以使用以下
捕获异常 try
val := StrToFloat(edtNumber.text);
except
on E: EConvertError do
begin
ShowMessage( 'Entered Data is not a valid Floating Point number' );
end;
end;
您可能还想查看
StrToFloatDef( edtNumber.text, -1 )
如果您只需要确保转换返回有效数字
答案 2 :(得分:1)
有许多控件可以被告知只接受数字输入,这比你接受的答案有一些好处。
jedi JVCL library例如包括几个数字输入控件,基本VCL包含一些可能性,包括用于输入整数值的Spin Edit控件。
答案 3 :(得分:0)
我找到了解决方案 http://www.festra.com/eng/snip05.htm
(来自链接的代码)
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in [#8, '0'..'9', '-', DecimalSeparator]) then begin
ShowMessage('Invalid key: ' + Key);
Key := #0;
end
else if ((Key = DecimalSeparator) or (Key = '-')) and
(Pos(Key, Edit1.Text) > 0) then begin
ShowMessage('Invalid Key: twice ' + Key);
Key := #0;
end
else if (Key = '-') and (Edit1.SelStart <> 0) then begin
ShowMessage('Only allowed at beginning of number: ' + Key);
Key := #0;
end;
end;