如何使TEdit只能输入数字(30分)

  • 主题发起人 主题发起人 Zythum
  • 开始时间 开始时间
用TMaskEdit好
 
唉,wjiachun快的很,用maskedit
如果非得用数字输入edit(好象没非得用的必要。。。),先看edit.text能不能转换成数字类型。。呵呵。。纯属骗分。
 
EditMask要限制字符出现的位置,如果只限制字符可用ValidChars属性
 
对于TStringGrid,如何限制只能输入数字?
 
但用maskedit 不好保证 字符的输入是一个接一个的
 
procedure TeditONkeydown;
if key<'o' and key>'9' then showmessage('非法')

行不行?
 
你可以利用TEdit控件的OnKeyPress事件,在这个事件中判断新输入的字符是否为数字,具体方法如下:
1. 获得Text的长度和当前Text的内容;
2. 截取Text的最后一个字符,并判断是否为数字;
3. 加入你的处理程序

另:
你为什麽不用MaskEdit控件呢?
 
在 Edit 的 KeyPress 事件中加入下列代码:
if not((key in ['0'..'9',#8]) ) then
key := #0;
 
用RXLib控件组中的CurrenyEdit控件可以达到你的要求,

如果要自己写的话,除了要监视键盘事件外(就像上面那些人所说的),
还要在OnChange事件中监视Edit控件中的内容, 防止用户用“粘贴“
命令往控件中加入非数字字符。

当然, 最好还是是RX控件,相当省心,而且有源代码。
 
若是C++Builder,可在其OnKeyPress事件中加入:
if (!(Key<='9'&amp;&amp;Key>='0'||Key==0x8||Key==0xd)) {
Key=0;
MessageBeep(-1);
}
 
MaskEdit 不好用,
 
用VAL函数。即:
先定义变量:VAR I:INTEGER;
BEGIN
Val(EDIT1.Text,I,code1);
if (code1<>0) THEN
begin
Messagedlg('必须为数字',mtError,[mbOK],0);
edit1.setfocus;
Abort;
end;
怎样?够详细的吧!解决啦给俺EMAIL:linersoft@cmmail.com
 
我想我只能用字符的ASCII码来定了我就是用这种方法来定我的一个电话字
段的输入限制。
 
1, edit 中只输入数字
SetWindowLong(Edit1.Handle, GWL_STYLE,
GetWindowLong(Edit1.Handle, GWL_STYLE) or
ES_NUMBER);
 
一行解决,呵呵。
 
限制只能数字输入:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if ((key<'0') or (key>'9'))and (key<>#8) then
key:=#0;
end;
够简单吧!
比用MaskEdit好.
 
1.将Tedit所放的窗体的keypreview属性设为False;
Form1.Keypreview:=False;
2.编写Form1的Onkeypress事件,只接受你要求的输入;
procedure TForm1.onKeyPress(Sender: TObject; var Key: Char);

begin
if ((key<'0') or (key>'9'))and (key<>#8) then
key:=#0;
end;

 
arm 和fyx 说的都有对
关键是看你对那个感兴趣
 
#8 表示什么?
 
后退
顶部