一个老问题: 怎样禁止在Edit框中输入非数字的字符?(50分)

  • 主题发起人 主题发起人 sleepy
  • 开始时间 开始时间
S

sleepy

Unregistered / Unconfirmed
GUEST, unregistred user!
俺看了一本C++Builder的书,它提供的是如下的办法:
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
AnsiString ansistrTemp;
ansistrTemp=Edit1->Text;
for(int i=1;i<=ansistrTemp.Length();i++)
{
if(ansistrTemp>'9'||ansistrTemp<0)
ansistrTemp.Delete(i,1);
}
Edit1->Text=ansistrTemp;
}
实现功能倒是没问题, 只是每当输入非数字时, Edit框中的光标就跑到了
最前面, 这样, 如果继续输入的话, 需要手动把光标挪回到最后,感觉很
土. 请问有没有更好的解决办法? 或者, 如何控制Edit框中光标的位置?
 
BCB没用过, 不过edit应该有selstart属性吧? 如果有就是它了.
 
用ONKEYPRESS事件不就可以了么。
另外,关于光标位置,你看看
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=119519
http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=95229
 
么没用过C++builder,不知有没有 maskedit 这一个控件,如果有
用它可以设定要屏蔽的字符.
 
这是再简单不过的问题了, 在BCB中这样实现:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender;....{这里我就省略了})
{
if(key<' ')return;
//放走控制键
if( Key < '0'||key> '9')key=chr(0);//去掉非法字符
}
Delphi里面这样实现
procedure TForm1.Edit1KeyPress(Sender;TObject....{这里我就省略了})
{
if key<' ' then
exit;
//放走控制键
if (Key < '0') or (key> '9') then
key := 0;//去掉非法字符
}
 
在KeyPress事件中:
const str='abcde...z0..9'
if not (key in str) then
key = char(0);
 
我试过了cookey的方法,很好使!
改一下可以输入十六进制:
if(Key<' ')return;
//放走控制键
if( (Key < '0'||Key> '9') &amp;&amp;
Key!='x' ) key=0;
//去掉非法字符
 
谢谢各位,又学了几招! 可惜分太少,见笑了,呵呵.
 
多人接受答案了。
 
用memo 替代edit 加上右对齐 ,更妙!
 
后退
顶部