各位兄台:
    我有个一个文本框,判断输入是否为数字,我用的是这样的一个方法:
      procedure TForm1.edtusercardKeyPress(Sender: TObject; var Key: Char);
      begin
        if not (key in ['0'..'9',#8])  then
          begin
           showmessage ('輸入的不是数字,請輸入數字!');
           key := #0;
           exit;
          end;
      end;
==================================
可是存在问题,就是弹出的提示框要点击很多次才可以。真的,都不知道要点击多少次,最少都有4次呢?
请问,少爷,少奶奶怎么办哦?
我这里还有些分。
跟你们散分了。

解决方案 »

  1.   

    begin
      if not (key in ['0'..'9',#8])  then
      begin
      //showmessage ('輸入的不是数字,請輸入數字!');
        key := #0;
      //exit;
      end;
    end; 
      

  2.   

    //showmessage ('輸入的不是数字,請輸入數字!');
    把这个注释去掉
      

  3.   

    加个label不就行了?label1.caption='不是数字';
      

  4.   


      procedure TForm1.edtusercardKeyPress(Sender: TObject; var Key: Char); 
          begin 
            if not (key in ['0'..'9',#8])  then 
              begin 
              label1.caption='不是数字';   //在输入框后面放个label, 是数字就绿色显示。不是数字就红色显示。
              key := #0; 
              label1....   //label显示红色
              exit; 
              end
            else  
             label1....   //label显示绿色  
          end; 
      

  5.   

    实际上也可以用输入框的hint提示  用hint提示的好处是 不用用鼠标点确定按钮
      

  6.   

          procedure TForm1.edtusercardKeyPress(Sender: TObject; var Key: Char); 
          begin 
            if not (key in ['0'..'9',#8])  then 
              begin 
                key := #0; 
              end; 
          end;
      

  7.   


    //输入数字
    procedure TForm1.FormCreate(Sender: TObject);
    var
     style: DWord;
    begin
     style:= GetWindowLong(edtusercard.Handle, GWL_STYLE);
     SetWindowLong(edtusercard.Handle, GWL_STYLE, styleor ES_NUMBER);
    end;
    //输入过滤
    procedure TForm1.edtusercardKeyPress(Sender: TObject; var Key: Char); 
    begin 
     if not (key in ['0'..'9',#8])  then key := #0; 
    end;
    //输入完成可以这样判断
    var Temp:Integer;
    if  TryStrToInt(edtusercard.Text,Temp) then
    begin
    end;
    前两种方法都不能过滤掉 右键菜单->复制的过滤,我一般屏蔽右键菜单,关键还是要做最后执行的判断!
      

  8.   

    定义个全局BOOLEAN(是否已弹出了提示信息)
    edtusercardKeyPress的时候,先判断
     IF SHOWED THEN EXIT;
     下面你的代码