标题:关于不允许出现2个小数点问题
只看楼主
zjwlhxy
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-5-14
 问题点数:0 回复次数:3 
关于不允许出现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个小数点,但能输入一个小数点,高手能不能回答下,谢谢。
搜索更多相关主题的帖子: 小数点 the Sender els 
2008-04-09 21:22
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
得分:0 
要完整的看

  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)
2008-04-10 14:38
provoke
Rank: 2
来 自:广州
等 级:新手上路
威 望:5
帖 子:175
专家分:0
注 册:2007-6-14
得分:0 
在keypress事件中限制很复杂
如果要通过限制按键来强制只能输入数字,还应当考虑
1、小数点不能出现在第一位/最后一位;
2、允许在首位输入负号;
3、允许在末位输入百分号;
4、禁止形如00.5等非法数值;
……
越想越多,好麻烦!最好还是对所输入的字符串转换为数值,嵌入到try...except中,若转换失败再给出相应的提示,否则不可能考虑到所有的情况。总不能用穷举法一一禁用吧!
在控件的change事件里

爱我至爱,至死不渝!
2008-04-10 21:24
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
得分:0 
在执行这段代码的时候,输入的字符其实还没有进入输入框啊,
这时的判断就是:如果已经有小数点了的话,则不再允许输入了。
2008-04-10 23:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-208083-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.218078 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved