如何让edit只输入数字和小数点?

解决方案 »

  1.   

    if not(key in['0'..'9',#46]) then key=#0
      

  2.   

    if not (key in ['0'..'9','.',#8]) then
       begin
          key:=#0;
          Messagebeep(0);
       end;
      

  3.   

    if not(key in['0'..'9',#46]) then key=#0
    这样的问题帖子里非常多
      

  4.   

    try
               strtofloat(edit1.text);           
            except
                  showmessage('请正确输入!' );
                  exit;
            end;
      

  5.   

    在 Edit 的 KeyPress 事件中加入下列代码: 
      if not((key in ['0'..'9','.',#8]) ) then 
        key := #0; 要想控制的完善一点,
    在OnChange事件中处理:
    procedure TForm.EditChange(Sender: TObject);
    begin
      try
        StrToFloat((Sender as TEdit).Text);
      except
        (Sender as TEdit).Text:=Copy((Sender as TEdit).Text,1,
          Length((Sender as TEdit).Text)-1);
        (Sender as TEdit).SelStart:=Length((Sender as TEdit).Text);
      end;
    end;
      

  6.   

    楼上的right:
     if not((key in ['0'..'9','.',#8]) ) then 
        key := #0; 
      

  7.   

    if not (key in ['0'..'9',#8])  then
       begin
          if (key='.') and (pos('.',Tedit(sender).Text)=0) then exit;
          key:=#0;
          Messagebeep(0);
       end;就
    OK了!
      

  8.   

    在KeyPress里控制怎么都不完善!
    如果Ctrl+C,Ctrl+V怎么办?
    如果右键拷贝、粘贴呢?
    所以只有在OnChange事件中才能完善控制:
    procedure TForm.EditChange(Sender: TObject);
    begin
      try
        StrToFloat((Sender as TEdit).Text);
      except
        (Sender as TEdit).Text:=Copy((Sender as TEdit).Text,1,
          Length((Sender as TEdit).Text)-1);
        (Sender as TEdit).SelStart:=Length((Sender as TEdit).Text);
      end;
    end;
      

  9.   

    应该用 keypress+change才能完善吧!有没有办法可以在粘贴之前判断数据?