在调试运行的时候确实是先出现Delphi的异常,但在程序独立运行时,如果你写了自己的异常处理,则是你自己的异常提示出现。

解决方案 »

  1.   

    应该在Application.onException中可以捕捉到该类错误,可以试试!
      

  2.   

    最好的办法就是让你的DBGRID只读,使用其他的输入控件来控制输入。
      

  3.   

    DBGrid1.DataSource.DataSet.FieldByName('   ').EditFormat:='####.###';
    DBGrid1.Fields[i].EditFormat:='####.###';
      

  4.   

    同意: Guoxc(大浪乘风) 的说法
      

  5.   

    DBGrid1.DataSource.DataSet.FieldByName('  ').OnValidate:=myOnValidate;
      

  6.   

    刚才想的优点简单,但这次没问题了。procedure TForm1.aaSetText(Sender: TField; const Text: String);
    begin
         try
          StrToFloat(Text);
         except
           Showmessage('No');
         end;
    end;
      

  7.   

    wk_knife(隐生宙)的对了95%
    procedure TForm1.aaSetText(Sender: TField; const Text: String);
    begin
        try
          StrToFloat(Text);
        except
          Showmessage('No');
          Exti; 
        end;
        Sender.Value := Text;
    end; 
    我最想要的结果是:用户输入的时候就已经不能输入非法的数字,而不是
    输入完了再判断(是不是有点挑剔?呵呵)
      

  8.   

    在   DBGrid1  的KEYPRESS事件中写入一下代码就OK了:
      (在外层在包上一层判断是否光标在你需要的列中 就OK 了)
          If not (Key in ['0'..'9','.',#8, #13]) then Key:=#0;
          If Key ='.' then
          begin
            If (Pos('.', Edit1.Text) > 0)or(Edit1.text='') then Key:=#0;
          end;
      

  9.   

    有两种方法:
    1.重载Application.onException,不过这时要判断异常的类别,否则你所发生的任何异常可能都要出现一个“浮点数错误”的提示框,岂非莫名其妙
    2.在字段OnSetText当中写try...except,可以实现
    以上两种方法我都用过,没有任何问题。