限定文本框只能输入数字的问题(20分)

  • 主题发起人 主题发起人 wobuzhidao_yes
  • 开始时间 开始时间
W

wobuzhidao_yes

Unregistered / Unconfirmed
GUEST, unregistred user!
限定文本框只能输入数字,
这个文本框只能输入数字,具体是表示行车里程或者是其它的数字,
要求可以允许用户输入 '.'符号。
请大虾指点,谢谢。
 
用MaskEdit就行了
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key not in [你允许输入的字符] then
报错!
end;
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (not(key in ['0'..'9','.'])) and (ord(key)<>8) then
key:=#0
end;
//---ord(key)<>8 可以使用退格键
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','.']) then
key := #0;
end;
 
如果要求输入的是整数
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_STYLE,GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);
end;
如果要输入小数的话
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var p:integer; tp:TPoint;
begin
if key in ['0'..'9','+','-','.'] then
begin
if key in ['+','-'] then
begin
p:=pos('+',Edit1.Text)+pos('-',Edit1.Text);
if p>0 then key:=#0
else
begin
GetCaretPos(tp);
if tp.x>1 then key:=#0;
end;
end
else
if key='.' then
begin
p:=pos('.',Edit1.Text);
if p>0 then key:=#0;
end;
end
else if key>#31 then key:=#0;

end;
 
if key in ['0'..'9','.'] then
if key='.' then
begin
p:=pos('.',Edit1.Text);
if p>0 then key:=#0;
end;
else
if key>#31 then
key:=#0;

但是这种情况不能除去第一个输入字是'.' ,我不知道应该怎样处理,
而且第一个字符是 '.',是否合法我不清楚。
 
简单的方法:
1、keydown事件中:判断按下的键为[0-9]或.
2、keyup事件中:将其输入的转化为数值型,如果报错吃掉这个键
 
下面的代码可以实现只能输入整数或者浮点数。'.'不能在第一个,并且不能出现两个'.'
procedure TForm.Edit1KeyPress(var key: char);
begin
if not (key in ['0'..'9',#8,'.']) then key := #0;
if (key ='.') and (pos('.',Edit1.text)>0) then key := #0;//判断是否已经有了'.'
if (key = '.') and (length(Edit1.text)=0) then key := #0; //判断'.'是否在第一
end;
 
你可以用Raise2.5控件组中的TNumiricEdit
 
多人接受答案了。
 
后退
顶部