关于不允许出现2个小数点问题
如下这段程序procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var c: Integer;
begin
if key='.' then
begin
for c:=1 to length(TEdit(Sender).text) do //这里的语句是控制不输入2个小数点
begin
if Tedit(Sender).text[c]='.' then key:=#0;
end;
end
else
if key=#13 then PerForm(WM_NEXTDLGCTL,0,0)
else
if key=#8 then key:=#8
else
if (key<'0') or (key>'9') then
key:=#0;
end;
他里面的for c:=1 to length(TEdit(Sender).text) do
begin
if Tedit(Sender).text[c]='.' then key:=#0;
我是理解他这个语句就是不允许输入小数点,但是实际上这个语句的作用就是不允许输入2个小数点,但能输入一个小数点,高手能不能回答下,谢谢。 要完整的看
if key='.' then //如果按了小数点才会进行下面的判断
begin
for c:=1 to length(TEdit(Sender).text) do //遍历前面输入的所有字符
begin
if Tedit(Sender).text[c]='.' then key:=#0; //如果已经有小数点,则禁止输入小数点
end;
end
else //如果输入的不是小数点,执行下边的程序
.......
在keypress事件中限制很复杂
如果要通过限制按键来强制只能输入数字,还应当考虑1、小数点不能出现在第一位/最后一位;
2、允许在首位输入负号;
3、允许在末位输入百分号;
4、禁止形如00.5等非法数值;
……
越想越多,好麻烦!最好还是对所输入的字符串转换为数值,嵌入到try...except中,若转换失败再给出相应的提示,否则不可能考虑到所有的情况。总不能用穷举法一一禁用吧!
在控件的change事件里 在执行这段代码的时候,输入的字符其实还没有进入输入框啊,
这时的判断就是:如果已经有小数点了的话,则不再允许输入了。
页:
[1]
