delphi - 如何正确格式化和验证编辑控件以仅接受浮点或货币值

标签 delphi validation formatting

我有一个应用程序需要在编辑控件中接受浮点或货币值。我的问题是我必须做什么来格式化和验证编辑控件输入,以便它只接受数字、逗号或点(逗号或点取决于系统区域设置)。格式为##.## (45.21)。我想做一种可以控制所有编辑控件的方法,使用 float 格式和验证。

现在我在使用 TryStrToFloat 方法的 OnChange 事件中有代码,但有时我得到“''不是浮点数”错误。

也许你们比我做得更多,并且有一些很好的例子如何正确地做到这一点。

最佳答案

如果您想继续使用相同的验证方法,只需增强您的算法以考虑边缘情况(以及您希望如何管理它)。

例如,您可以考虑接受一个空字符串作为有效输入,并且不抛出异常。您还必须考虑在输入格式错误的情况下如何执行用户交互。例如,如果用户输入了无效数字,您希望阻止用户在同一毫秒内输入值……或者您可以采取更自然的方法(例如,验证直到用户认为一切都正确)。

您还可以通过在输入完成时以非停止方式通知用户来管理验证,只需在违规字段上产生可见效果,如果用户尝试以停止方式(例如使用消息框)保存数据。

一个简单的验证函数可能如下所示:

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;

关于delphi - 如何正确格式化和验证编辑控件以仅接受浮点或货币值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5033078/

相关文章:

delphi - 将 crHourGlass 替换为新的 Windows 7 "snake eating its tail"光标

delphi - 更改 Delphi 中 Firemonkey 应用程序中大多数控件(即 TPanel)的颜色(仅限 XE2 Update4 和 XE3)

c++ - 验证和中缀表达式

Vim:自动格式化长单行

delphi - 随机化多个字符串列表

image - 在设计时加载图像(图标)时的 EOutOfResources

java - 如何扩展内置的 Hibernate Validator ConstraintValidator

JavaScript 表单提交验证干扰其他提交按钮

c# - 如何格式化未在 C# MVC 中初始化的小数?

c++ - 我可以在处理它时保留编译器输出的格式吗?