----------怎样限制文本框中仅能输入数值(包括小数点)?----------(30分)

  • 主题发起人 主题发起人 bobzane
  • 开始时间 开始时间
B

bobzane

Unregistered / Unconfirmed
GUEST, unregistred user!
要求输入的为实数,不一定在每键入一个字符时检查,只要有个命令,能够查看这个文本
框中输入的是不是实数即可.
 
我着有段程序,实现EDIT空间里只能输入数字
不过小数点也过滤掉了!你自己改改!
procedure TPMMS110.edtYearKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
inherited;
if (key = 8) or (key = 37) or (key = 39) or (key = 46) or (key = 13) then
begin
TEdit(sender).readonly := false;
exit;
end;
if ((key >=48) and (key <= 57))
or ((key >= 96) and (key <= 105)) then
begin
TEdit(sender).readonly := false;
end
else
Edit(sender).readonly := true;
end;

 
try
i:=strtoint(edit1.text);
showmessage('输入为整数');
except
showmessage('输入不是整数');
end;
 
好象lostlastlove的方法比较常见一些。
 
try
i:=strtofloat(edit1.text);
showmessage('输入为数字);
except
if not((length(trim(edit1.text))=1) and ((trim(edit1.text)='.')
or (trim(edit1.text)='-') or (trim(edit1.text)='+'))) then
showmessage('输入不是数字);
end;
 
为什么不用MASKEDIT控件呢???
 
要求输入的为实数,不一定在每键入一个字符时检查,只要有个命令,能够查看这个文本
框中输入的是不是实数即可:
这样子的话还是蛮容易的:try
strtofloat(edit1.text);
showMessage("输入的不是一个实数");
except
showMessage("输入的不是一个实数");
end;
 
uses mmsystem
procedure TForm1.Edit7KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9': ; //对数字键响应
'.': ;
#8: ; //对退格键响应
else
begin
key:=#8;
playsound('',0,snd_async);//声音提示
end;
end;
end;
 
哈哈,又有分赚了!
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key<>#8) and (not(key in ['0'..'9']) and (key<>'.')) then
begin
key:=#0;
showmessage('只能输入数字!');
end;
end;

 
前面几个朋友的解法看起来还可以,不过怎样解释这种情况呢?
输入: 1.2.3 本来是想输入1.23,可是多输入了一个 . ,前面的两个代码就
不能解决这个问题了。我想是不是应该判断这个文本框内的数是不是实数,用什么函数呢?
好象用StrToFloat,然后加Try ...Except...不行,出错误。
在有,有人说用MaskEdit控件,可不可以呢?我也没试出来(是效果不好)。
 
各位在KeyPress,KeyDown中处理的这个问题是不够全面的,大家看看这是个什么东西
187.34.87-.34
谁要说上面的是数值,我就跟谁急.
 
procedure Tform1.edit1keypress(.....);
begin
if not (key in ('0'..'9',#n) then
key:=#0;
end;
其中n是“.”的ASCII码,我忘了是什么了,你查查资料看就是了
 
在onchange中处理
strtofloat
估计可以的
 
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if pos('.',edit1.text)>0 then key:=#0;
if not(key in [#8,'0'..'9','.']) then key:=#0;
end;
change事件中写一句:if edit1.text='' then edit1.text:='0';
 
用什么函数来判断一个数为实数?
 
他们说的都很有道理,但都有一点小问题,这问题关键判断一个string是不是实数,这个
用函数 val 可以实现,用法查一下帮助即会。
假如你只是要输入0—9和一个小数点,用限制输入也行,但检查小数点时,假如
edit.text中已经有了小数点或text.text为空时,限制输入。
但用val函数简单的多!!
 
1使用MaskEdit控件,设置EditMask属性即可例如99.999;1;_
2如果非要使用Edit控件,请在OnExit事件上写如下代码
procedure TForm1.Edit1Exit(Sender: TObject);
begin
try
strtoFloat(Edit1.text);
except
showmessage('输入不是实数');
(Sender as TEdit).SetFocus;;
end;
end;
 
procedure Tform1.edit1keypress(.....);
var
i:integer
begin
//确保只能输入一个.号
for i := 0 to length(edit1.text) -1 do
if (key = #n) and (edit1.text = ".") then]
key := #0;

if not (key in ('0'..'9',#n) then
key:=#0;

end;
其中n是“.”的ASCII码
可能有点误差,测试一下
 
听panyongze的,或者,你可以利用strToFloat的异常写一个函数,来校验是否是实数
function IsFloat(str:string):boolean
var
realA:real;
begin
Result:=True;
try
realA:=strToFloat(str)
except
Result:=False;
end
end;
当然,在程序调试的时候,你要将Delphi的异常报告关掉
 

Similar threads

后退
顶部