我有一个需要在编辑控件中接受浮点值或货币值的应用程序。我的问题是我必须做什么来格式化和验证编辑控件输入,因此它只接受数字,逗号或点(逗号或点取决于系统区域设置)。格式是##。##(45.21)。我想做一个可以控制所有编辑控件的方法,我们使用float格式化和验证。
现在我在使用TryStrToFloat方法的OnChange事件中有代码,但有时我得到“''不是浮点数”错误。
也许你们比我做得更多,并且有一些很好的例子,如何正确地做到这一点。
答案 0 :(得分:2)
如果您想继续使用相同的验证方法,只需增强算法以考虑边缘情况(以及您希望如何管理)。
例如,您可以考虑接受空字符串作为有效输入,并且不要抛出异常。您还必须考虑在输入格式错误的情况下如何执行用户交互。例如,如果用户输入的数字无效,您希望停止用户以相同的毫秒输入值...或者您可以采用更自然的方法(例如,在用户认为一切正确之前进行验证)。
您还可以通过在输入完成时以非稳定的方式通知用户来管理验证,只是对违规字段产生可见效果,并以阻塞方式(例如使用消息框)用户尝试保存数据。
简单的验证功能可能如下所示:
function IsEditValidFloat(Sender: TEdit; const AcceptBlank: Boolean = True): Boolean;
var
sValue: string;
Temp: Extended;
begin
sValue := Trim(Sender.Text);
if (sValue.Text = '') then
Result := AcceptBlank
else
Result := TryStrToFloat(sValue, Temp);
end;
//you might call this on the OnChangeEvent:
procedure TForm1.Edit1Change(Sender: TObject);
begin
if IsEditValidFloat(Sender as TEdit) then
ChangeDisplayState(Sender, dsValid)
else
ChangeDisplayState(Sender, dsError);
end;
答案 1 :(得分:1)
只需获取JVCL并使用TJvValidateEdit组件。