奇怪的问题,如何使用户在TEdit中只输入数字?为何在VB中行在BCB中不行?

bitfan 2002-08-10 05:19:44
我在窗体中放了一个编辑框,想让用户只输入数字,屏蔽掉其它所有按键,我在KeyDown中这样写:
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{

if(!((Key>48)&&(Key<59))) //0~9的ASCII码
Key=0;
}
但在编辑框中仍然显示用户输入的其它字符,比如“a”,这是怎么回事?
我用的是BCB6,是不是一个BUG?
同样的方法我在VB中用过,没问题。
...全文
60 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
susanjona 2003-05-08
  • 打赏
  • 举报
回复
?是吧,sncel(地狱情人)的方法对吗?
如果你第一次输入的是一个字符,它会报错,可第二个它就不报了,就由你输了
还是只有我会出这样的问题啊?
bitfan 2002-08-10
  • 打赏
  • 举报
回复
呵呵,谢诸位大侠鼎力相助。
sncel(地狱情人)的方法很好,但不能输入小数点。
Ernest_tong(tong) 指出的要点很重要,在KeyPress事件中判断按键,用Key=0取消不必要的按键。
大家都有分!
SimonDW 2002-08-10
  • 打赏
  • 举报
回复
封装方式的问题,作为window的基本资源,是可以设只填数字的,
但borland封装时没将该属性包含。
jishiping 2002-08-10
  • 打赏
  • 举报
回复
上面的 KeyPress,KeyDown 不能拦截用户用鼠标从剪贴簿粘贴其它字符,
但是却又拦截了用户用键盘从剪贴簿粘贴数字,同时用户又不能用Del,
Back键删除字符。最简单,最保险的方法,就是 sncel(地狱情人) 说的
方法:
SetWindowLong(Edit1->Handle, GWL_STYLE, GetWindowLong(Edit1->
Handle,GWL_STYLE)|ES_NUMBER);

Ernest_tong 2002-08-10
  • 打赏
  • 举报
回复
在KeyPress 事件中使用才有效。
wxcwuxuchun 2002-08-10
  • 打赏
  • 举报
回复
同意上面的方法,最简单!
sncel 2002-08-10
  • 打赏
  • 举报
回复
这样就可以了。。
SetWindowLong(txtEdit3->Handle,GWL_STYLE,GetWindowLong(txtEdit3->Handle, GWL_STYLE) + ES_NUMBER);
COKING 2002-08-10
  • 打赏
  • 举报
回复
if(Key==VK_RETURN||Key==VK_DELETE) return;
if (Key<'1'||Key>'9') Key=0;
annkie 2002-08-10
  • 打赏
  • 举报
回复
上面写错了:
if(!((Key>48)&&(Key<59)))
Edit1->Text =Edit1->Text.SubString(1,Edit1->Text.Trim().Length()-1);
annkie 2002-08-10
  • 打赏
  • 举报
回复
if(!((Key>48)&&(Key<59)))
Edit1->Text =Edit1->Text.SubString(1,Edit1->Text.Trim.Length()-1);

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧