注册 登录
编程论坛 Delphi论坛

关于不允许出现2个小数点问题

zjwlhxy 发布于 2008-04-09 21:22, 1626 次点击
如下这段程序
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个小数点,但能输入一个小数点,高手能不能回答下,谢谢。
3 回复
#2
永夜的极光2008-04-10 14:38
要完整的看

  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 //如果输入的不是小数点,执行下边的程序
 .......
#3
provoke2008-04-10 21:24
在keypress事件中限制很复杂
如果要通过限制按键来强制只能输入数字,还应当考虑
1、小数点不能出现在第一位/最后一位;
2、允许在首位输入负号;
3、允许在末位输入百分号;
4、禁止形如00.5等非法数值;
……
越想越多,好麻烦!最好还是对所输入的字符串转换为数值,嵌入到try...except中,若转换失败再给出相应的提示,否则不可能考虑到所有的情况。总不能用穷举法一一禁用吧!
在控件的change事件里
#4
makebest2008-04-10 23:35
在执行这段代码的时候,输入的字符其实还没有进入输入框啊,
这时的判断就是:如果已经有小数点了的话,则不再允许输入了。
1