procedure TForm1.Edit1Change(Sender: TObject);
var
  strTest:string;
  intTest,intPos:integer;
begin
try
  intpos:=pos('_',edit1.Text );
  while intpos<>0 do
  begin
    delete(strTest,intpos,1);
    intpos:=pos('_',strTest );
  end;
  inttest:=strtoint(strtest);
except
  on E: Exception do
  begin
    messagedlg('只能输入数字和_!',mtError ,[mbAbort],0);
    edit1.Text :='';
  end;
end;

解决方案 »

  1.   

    const a=['0','1','2','3','4','5','6','7','8','9','-'];
    for i:=1 to length(Your_Str) do
    begin
    if not(Your_Str[i] in a) then 
    begin
    showmessage('输入不合法');
    //exit;
    //或作出相应处理
    end;
    end;
      

  2.   

    keypress事件:
    ...
      if not (key in [#8,'0'..'9','-') then 
        key:=#0;
      

  3.   

    1
    使edit只能输入数字
    SetWindowLong(Edit1.Handle, GWL_STYLE,
                      GetWindowLong(Edit1.Handle, GWL_STYLE) or
                      ES_NUMBER); 
    2
    在keypress事件判断。if not key  in['0',,'9','A'..'Z','.','-',char(vk_return),char(vk_delete),char(VK_back)] Thenkey=#0
    3
    ///////Begin Source
    function IsNumber(mStr: string): Boolean; { 返回字符串是否是正确的数字表达 }
    var
      I: Real;
      E: Integer;
    begin
      Val(mStr, I, E);
      Result := E = 0;
      E := Trunc(I);
    end; { IsNumber }
      

  4.   

    2我用的最多,
    因为么,想用哪 个数就用哪 个,还能BACK,DEL等代码也不多,而且最稳定
      

  5.   

    使用集合Type
      TMyStr = ('0','1','2','3','4','5','6','7','8','9','-')
    var
      MyStr : TMyStr;
    begin
      if not (yourstr in MyStr) then
      begin
          ...
      end;
    end;
      

  6.   

    笨笨的方法好:if not key  in['0',,'9','A'..'Z','.','-',char(vk_return),char(vk_delete),char(VK_back)] Then