在OnChange事件中写代码控制,可以实现.不过太麻烦.
你可以逐一判断输入字符是否在['0'..'9','.','+','-'],
并且+ - 只能有一个,位于第一个;
.只能有一个,不能位于第一个....等等.
笨办法.

解决方案 »

  1.   

    var
      selCol, yourCol: TColumn;procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (selCol = yourCol) and not (Key in ['.','0', '1','2','3','4','5','6','7','8','9']) then Key := #0;
    end;procedure TForm1.DBGrid1CellClick(Column: TColumn);
    begin
      selCol := Column;
    end;
      

  2.   

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

  3.   

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

  4.   

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

  5.   

    2分钟之内竟然有3个近似的答案,我的包括了空格和backspace和'.'所以慢了点
      

  6.   

    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (DBGrid1.SelectedField.Index=3) and (Not (Key in ['0'..'9','.',#8])) then 
        Key:=#0;
    end; 
      

  7.   

    procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (Key='.') and (Pos('.',DBGrid1.SelectedField.AsString)<>0) then Key:=#0;
      if (DBGrid1.SelectedField.Index=3) and (Not (Key in ['0'..'9','.',#8])) then 
        Key:=#0;
    end;  
      

  8.   

    我刚才说错了,是包括了回车,backspace和'.'
      

  9.   

    Edit的OnExit事件中写入
    try
      strtofloat(edit1.text);
    except
      Application.MessageBox('数字输入错误','提示',mb_ok+mb_iconstop);
      edit1.SetFocus;
      exit;
    end;