0

我有两个带标签的编辑框——一个用于最小值(名为 lbleRangeCalcMin),另一个用于最大值(lbleRangeCalcMax)。我想确保用户没有为最大值输入零,并且最小值小于最大值(不等于,但小于 - 我需要值的范围:最大值 - 最小值)。

我想在错误发生时立即捕获错误(例如,一旦用户为最大值输入零)。如果他/她输入零,我也不希望用户能够远离最大值。因此,我对 OnChange 和 OnExit 这两个事件进行了异常调用编程。

它工作正常,除非用户尝试重新输入另一个值而不是他输入的零。然后它给了我一个 EConvertError 消息:'' is not a floating point value。

如何允许用户在不引发此异常的情况下修改其条目?这是我的代码。谢谢。

procedure TfrmAnalysisOptions.lbleRangeCalcMaxChange(Sender: TObject);
begin
  if ((StrToFloat((lbleRangeCalcMax.Text) = 0) or
      (StrToFloat((lbleRangeCalcMax.Text) <
        StrToFloat((lbleRangeCalcMin.Text))) then
     MessageDlg('Max value cannot be zero or less than Min value.', mtError,
        [mbOK], 0);
end;



procedure TfrmAnalysisOptions.lbleRangeCalcMaxExit(Sender: TObject);
begin
  if ((StrToFloat(lbleRangeCalcMax.Text) = 0) or
      (StrToFloat(lbleRangeCalcMax.Text) <
        StrToFloat(lbleRangeCalcMin.Text))) then
     MessageDlg('Max value cannot be zero or less than Min value.', mtError,
        [mbOK], 0);
end; 
4

1 回答 1

1

用于TryStrToFloat()避免EConvertError异常:

var
  RangeMin, RangeMax: Double;
begin
  if not TryStrToFloat(lbleRangeCalcMax.Text, RangeMax) then Exit;
  if RangeMax = 0 then
  begin
     MessageDlg('Max value cannot be zero.', mtError, [mbOK], 0);
     Exit;
  end;
  if not TryStrToFloat(lbleRangeCalcMin.Text, RangeMin) then Exit;
  if RangeMax < RangeMin then
     MessageDlg('Max value cannot be less than Min value.', mtError, [mbOK], 0);
end;
于 2013-10-02T02:34:08.237 回答