我到底怎样确保我的edit框中输入的是一个数字值!(20分)

  • 主题发起人 主题发起人 huijunzi
  • 开始时间 开始时间
maskedit,如果不想用maskedit的话

procedure TForm1.Edit1KeyPress(Sender: TObject
var Key: Char);
begin
if not (key in ['0'..'9','.']) then
key:=#0;
end;
 
Chenlili说得对。
 
procedure TForm1.FormCreate(Sender: TObject);
begin
SetWindowLong(Edit1.Handle, GWL_STYLE, GetWindowLong(Edit1.Handle, GWL_STYLE) or ES_NUMBER);
end;
 
想应onchange
然后try
strtoint(edit.text)

出异常就不是数字
 
如只想输入整数的话,chenlili的方法可以,但首位会出现0,应添加:

procedure TForm1.Edit1OnChange(Sender: TObject
var Key: Char);
begin
edit1.text:=inttostr(strtoint(edit1.text));
end;

如想输入浮点数,则
设置一全局变量text:string;
procedure TForm1.Edit1Change(Sender: TObject);
begin
try
strtofloat(edit1.text);
except
edit1.text:=text;
end;
end;

procedure TForm1.Edit1KeyDown(Sender: TObject
var Key: Word;
Shift: TShiftState);
begin
text:=edit1.text;
end;
不过还有点小小的问题是光标会跳到最前面去,这你自已想办法吧。
 
if edit.text<='999999...' then it's 数字值 yes or no?
 
我也来灌点水:
各位老大的方法打体可分为两类:
1、把输入限定在数字和字母上,如:Chenlili
2、检查输入的是否是一个整数,如:Eyes4
dp的方法没用过,不敢妄评。
但以下情况各位考虑过吗?
1、输入的是一个实数,如109.02(简单的StrToInt不行了)
2、输入的是一不合法如:109.0.02(限定输入字符不行了)
3、输入的是一个带格式的数,如:1,109.02(两种情况都不行了)
第三种情况可能有点特殊,但前两种一般是会遇到的。
我是这样作的:
1、设一个变量保存Edit输入的数字(如果是的话)。
2、响应Edit的OnExit事件,判断是否合法,如果是改变变量的值,否则报错。
3、处理Edit的显示。
一般三种情况都可解决。
 
IsNumberic( String ) = True or False

没有的话别怪我,这是VB的,哈

 
多人接受答案了。
 
后退
顶部