Delphi中限制文本框(TEdit)只能输入小数
来源:来自网络 作者:不详 日期:2010-10-08 热度:有些时候需要限制程序里的文本框(这里指TEdit控件)里只能输入某些特定字符。比如说限制只能输入数字,这时可以设置
TEdit的NumbersOnly属性来实现,这里的TEdit将被限制为只能输入0到9这十个字符。那么,如果需要限制输入小数呢,
小数点被阻止了,所以这时不能使用NumbersOnly属性,另外也没有别的属性能实现的。那就只有自己来做!
限制输入,可以在OnKeyPress事件中来做。见如下代码:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
var
edt: TEdit;
str: string;
strL: string;
strR: string;
begin
// 获取当前文本内容, 注意要去掉选中部分(因为会被改写).
edt := TEdit(Sender);
str := edt.Text;
if Length(edt.SelText) <> 0 then
begin
strL := LeftStr(edt.Text, edt.SelStart);
strR := RightStr(edt.Text, Length(edt.Text) - edt.SelStart - edt.SelLength);
str := strL + strR;
end;
// 限制输入数字/小数点/退格键
if not CharInSet(Key, ['0'..'9', '.', #8]) then Key := #0;
// not (Key in ['0'..'9', '.', #8])
// 第一位不能为小数点
if (Key = '.') and (edt.SelStart = 0) then Key := #0;
// 只能输入一个小数点
if (Key = '.') and (Pos('.', str ) > 0) then Key := #0;
// 不能在前面插入 0 (输入第一个 0 时除外)
if (Key = '0') and (edt.SelStart = 0) and (str <> '') then Key := #0;
// 不能连续输入 0
if (Key = '0') and (LeftStr(str, 1) = '0') and (Pos('.', str) <= 0) then Key := #0;
end;
以上考虑到了比较多的情况,可以很好的限制输入小数。
如果程序里有很多的TEdit要做此限制,当然不必给每个控件写代码,把事件指定到同一个过程就行了
========================================================
如何在delphi里面控制Edit只能输入数字
━━━━━━━━━━━━━━━━━━━━━━━━━━
if not (key in ['0'..'9',#8]) then key := #0;
只能输入汉字,而不能输入数字或其他字符
━━━━━━━━━━━━━━━━━━━━━━━━━━
在Edit的OnKeyPress事件中
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Ord(Key)<127) or (Ord(Edit1.Text[1])>127) then
Key:=#0;
end;
要使一文本框中只可输入数字,而且当输入的数字错误时还可以通过Backspace键来修改.
━━━━━━━━━━━━━━━━━━━━━━━━━━
由于BackSpace的ASCII值是8,所以像以下这样即可
if (key<>#46) and ((key < #48) or (key > #57)) and (key <> #8) then
//如果输入不是数字或小数点(#46代表小数点)
begin
key:=#0; //取消输入的内容(#0代表空值)
showmessage('输入错误!请输入数字!'); //发出提示信息
end;
方法二:
if not (key in ['0'..'9',#13,#8 ,#46]) then
key := #0;
这样就可以了
只能输入数字,而不能输入其他字符
━━━━━━━━━━━━━━━━━━━━━━━━━━
edit 属性Maxlength 设置2;
在edit的onkeypress里
procedure Tmainform.editkeypress(sender:tobject;var key: char );
var
Uflag: integer;
begin
Uflag:=Tedit(sender).Tag;
if (not (key in ['1'..'9'])) and (not (key=#8)) then key:=#0;
end;
方法二:
edit的maxlength设置为2;
在edit的onkeypress事件内
procedure Ttbdlform.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if key <> #9 then// #9 是空格,你可以查找下数字1\2\3是什么值
showmessage('请输入数字')
end;
只能输入数字和小数点
━━━━━━━━━━━━━━━━━━━━━━━━━━
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','.',#8,#32]) then
key:= #0;
end;
end.
但如果你想只输入数字而且有格式限制 那么你最好还是用第三方控件`
方法二:
可以在keypress里面加上如下代码,可以输入数字,并且可以使用退格删除数字,可以使用回车
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
'0'..'9', #8, #13, #27, '.' : ;
else
begin
MessageBox(Handle, '请输入数字', PChar('输入错误'), MB_OK + MB_ICONINFORMATION);
Key := #0;
end;
end;
end;




![还你真实的开幕式!震撼美图[转]【连载】](/up_files/image/Article/2008/08/12/57015031.jpg)



