我是菜手,在限制Edit输入数字的问题搜索了20篇贴子,我发现了一个是而后年完整的:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['.','0'..'9',#8]) then key:=#0;
   {控制小数点不能写两次}
 if (key in ['.']) and (pos('.',Edit1.Text)>0) then key:=#0;
    {控制第一位不能写小数点}   
 if (key in ['.']) and(length(Edit1.Text)<1) then key:=#0;
     {控制第一位只能写一个0} 
 if (key in ['0']) and (pos('.',Edit1.Text)<1)and(copy(Edit1.Text,1,1)='0') then key:=#0;
end;  但如果我把Edit换成StringGrid,要控制StringGrid的某几列输入的是Float型,怎么做呢?如:
procedure Txinzengfm.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if (stringgrid1.col = 8) or (stringgrid1.col = 9) then 
 这里跟上面一样??//  但怎么把Edit1.Text该成stringgrid1的cells?
end;

解决方案 »

  1.   

    procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (stringgrid1.col = 1) or (stringgrid1.col = 2) then
      begin
        if not (key in ['.','0'..'9',#8]) then key:=#0;
        if (key in ['.']) and (pos('.',stringgrid1.Cells[stringgrid1.row, stringgrid1.col])>0) then key:=#0;
        if (key in ['.']) and(length(stringgrid1.Cells[stringgrid1.row, stringgrid1.col])<1) then key:=#0;
        if (key in ['0']) and (pos('.',stringgrid1.Cells[stringgrid1.row, stringgrid1.col])<1)
          and(copy(stringgrid1.Cells[stringgrid1.row, stringgrid1.col],1,1)='0') then key:=#0;
      end;
    end;
      

  2.   

    这样做好像复制(Ctrl+C)和粘贴(Ctrl+V)不能用了
      

  3.   

    呀!伴水又成星了,恭喜!同意伴水的意见,这类的所谓限制没什么必要,在提交或者最多在OnExit里面判断一下就行了