edit输入控制,有没有更好的方法.(50分)

  • 主题发起人 主题发起人 whitehorse
  • 开始时间 开始时间
W

whitehorse

Unregistered / Unconfirmed
GUEST, unregistred user!
使用edit1框接受一文本输入,要求文本只能输入10个字符,且不能少,
我把edit1.maxlength设为10,然后在edit1.onexit中设置检查
if length(edit1.text)<10 then
begin
报警信息;
edit1.setfocus;
end
为了方便输入我在edit1.onkeypress事件中设计了一个
记录按键输入数的值,自动跳到下一个控件上.
keycount:=keycount+1;
if keycount=10 then
下一控件.SetFocus;
end;
实际应用中的问题是edit控件接受第10个键的值时,就触发了edit1.onexit事件,结果报警
输入数据长度不够.
原来不加onexit事件时正常,把edit1.onexit事件改成下一个控件的onenter事件仍然不能
接受第10个字符.
有没有完成上面检查的更好的办法
 
怎么能这样写呢?假如我输入了 8 个字符,接着删除一个,再输入一个,这样你的
KeyCount 也会蹦到 10 啊。
在 OnChange 里面这样写吧:
if Length(Trim(edit1.text))=10 then
NextControl.SetFocus;
可以保证的确是输入了10个字符。
 
onkeypress的时候输入的东西并没有真正插入到edit1.text中,所以会报错。
而且通常onkeypress是对输入字符的合法性做判断的,不判断输入长度是否足够

还是用onchange事件吧
 
让我们仔细分析以下输入的过程,当你输入了前9个字符,在输入第十个的时候发生了
以下事情:windows发出消息,被程序接收,在分配到edit中,触发了edit的kerpress
事件,注意,此时我们输入的第十个字符还在在那条消息里,也就是说,还没有放到
edit中去,(当退出keypress事件处理过程时才真正房入edit中,之后,触发change,
要不然keypress中的 key怎么是var传递参数的那?)但是,你的count却已经加一了,
就出发了onexit。看那,上帝,明明是9个字符,onexit我为什么要欺骗我的主人?告
诉他,出错了!所以,请相信,你的电脑和delphi是忠于你的!
 
onkeypress 中的计数没有必要。
仅保留onexit中的判断就可以了。
 
用maskedit不是很方便吗。
 
推荐还是使用TMaskEdit,利用通用的Mask进行编辑控制,通用性更强,
还不用自己费力气
 
要限制输入,可以在ONKEYUP事件里处理!
IF LENGTH(EDIT1.TEXT)>=10
THEN OTHERCTL.SETFOCUS;
建议:报警提示是个很不友好的方法!!!
如果可能的话,在ONEXIT事件里
WHILE LENGTH(EDIT1.TEXT)<10 DO
EDIT1.TEXT:=EDIT1.TEXT+' ';//等等默认处理方式
希望对你有帮助 :)
 
用判断长度的方法是最好的方法length(edit1.text)
 
多人接受答案了。
 
后退
顶部