学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

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

关于不允许出现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个小数点,但能输入一个小数点,高手能不能回答下,谢谢。

TOP

要完整的看

  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 //如果输入的不是小数点,执行下边的程序
.......
从BFS(Breadth First Study)到DFS(Depth First Study)

严重鄙视一切把论坛当成作业生成器和人肉搜索引擎的人

TOP

在keypress事件中限制很复杂

如果要通过限制按键来强制只能输入数字,还应当考虑
1、小数点不能出现在第一位/最后一位;
2、允许在首位输入负号;
3、允许在末位输入百分号;
4、禁止形如00.5等非法数值;
……
越想越多,好麻烦!最好还是对所输入的字符串转换为数值,嵌入到try...except中,若转换失败再给出相应的提示,否则不可能考虑到所有的情况。总不能用穷举法一一禁用吧!
在控件的change事件里
爱我至爱,至死不渝!

TOP

在执行这段代码的时候,输入的字符其实还没有进入输入框啊,
这时的判断就是:如果已经有小数点了的话,则不再允许输入了。

TOP

发新话题