是这样的
我在edit中限制非数字输入,写了这样一个函数
function Isnumberic(edt:Tedit):boolean;
var str:string;
    i:integer;
begin
   result:=true;
   str:=edt.Text;   if str>'' then
    for i:=1 to length(str)  do
    begin
      if (str[i]<'0') or (str[i]>'9') then
      begin
        result:=false;
        delete(str,i,1);//删除输入的非数字字符
        edt.Text:=str;//重新赋值给edit,问题就出在这里,此时光标会回到edit框的起始位置, 而不是我想要的最后一个数字字符的后面。想问下在下面加什么代码可以实现光标处于最后一个字符的后面
      
      {????}      end;
    end;
end;

解决方案 »

  1.   

    function Isnumberic(edt:Tedit):boolean;
    var str:string;
        i:integer;
    begin
       result:=true;
       str:=edt.Text;   if str>'' then
        for i:=1 to length(str)  do
        begin
          if (str[i]<'0') or (str[i]>'9') then
          begin
            result:=false;
            delete(str,i,1);//删除输入的非数字字符
            edt.Text:=str;
            edt.selstart:=i;
            edt.setfocus;
          end;
        end;
    end;
      

  2.   

    function TryStrToInt(const S: string; out Value: Integer): Boolean;
      

  3.   

    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (Key<'0')or(Key>'9')then
        Key:=#0;
    end;
      

  4.   

    另外,你在循环中delete也是不好的做法如果按你的思路的话,那么需要把 for i:=1 to length(str)  do
    改成  for i:=length(str) downto 1  do
      

  5.   

    问题解决 谢谢hellolongbin(一个人[终不似,少年游]) 
    PS:longchaohui(阿龙) 谢谢你,不过我不想写在keypress事件中。:)
       我是写在edit的change事件中的。
      另外,hellolongbin(一个人[终不似,少年游]) ,为什么要改成 for i:=length(str) down to 1 ?区别是什么?
     毛毛毛毛,你怎么看出来我是刚毕业学生的?