一个小问题
我的Form上有若干个Edit控件,要求每个Edit中输入的数据的范围在1.6到29.9999,如果不在这个范围就提示错误,
于是我写了以下的代码:
procedure TMainForm.Edit1Exit(Sender: TObject);
begin
if TEdit(sender).text <> '' then
begin
if ((StrToFloat(TEdit(sender).Text)>29.9999) or (StrToFloat(TEdit(sender).Text)<1.6)) then
begin
TEdit(sender).Font.Color :=clRed;
Showmessage('Error! Your input out of range!');
TEdit(sender).SetFocus;
end
else
begin
if length(TEdit(sender).Text)<>7 then
begin
TEdit(sender).Font.Color :=clRed;
Showmessage('Error! The length of data is unequal to 7!');
TEdit(sender).SetFocus;
end
else
TEdit(sender).Font.Color :=clBlack;
end;
end;
end;
而且我要求小数点的位置必须在第三位,例如:要输入1.6,就必须输入01.6000。一般情况下,我的代码没问题。
但是,如果在除了第三个字符外误输入小数点,程序就会弹出异常对话框,说是非法的浮点数,例如我不小心
输入12.3.36,程序马上就终止,弹出异常,于是我又加了以下的代码:
procedure TAutoFitDlg.Edit1Change(Sender: TObject);
Var
s : String;
begin
if TEdit(Sender).Text <>'' then
begin
s :=TEdit(Sender).Text;
if ((s[1]='.') or (s[2]='.') or ((s[3]<>'.') or (s[3]<>'')) or (s[4]='.') or
(s[5]='.') or (s[6]='.') or (s[7]='.')) then
begin
TEdit(Sender).Font.Color :=clRed;
Showmessage('Error! Only the third char can be "."');
end;
end;
end
但还是不行,只要我一输入他就提示错误。和我的初衷不一样。
所以,我想问的是遇到这种情况怎么处理才能够让他只提示出错,而不是出现异常
就像我上面的那样:
if ...... then
begin
TEdit(sender).Font.Color :=clRed;
Showmessage('Error!);
TEdit(sender).SetFocus;
end
else
谢谢!
还有,我以前见过一个类似于Edit的控件,他当中输入的数据格式是固定,就和Windows系统中输入IP
地址的时候一样,他这种控件能不能从网上下载?谢谢