CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

如何最简单实现一个TextBox中只能输入数字型数据?

楼主gump2000(阿甘)2001-08-21 15:10:26 在 VB / 基础类 提问

一定要自己获取KeyPress事件吗?  
  TextBox一多了以后好麻烦啊。  
   
  1.1也是属于数字型数据 问题点数:20、回复次数:22Top

1 楼fsb_12345(myself)回复于 2001-08-21 15:15:20 得分 0

    只有一个一个地判断了Top

2 楼funxuming(起級賽亞人)回复于 2001-08-21 15:15:51 得分 0

可以使它只响应数字键Top

3 楼x_bigman(草胚子)回复于 2001-08-21 15:27:25 得分 0

你先在工程中添加一个模块,写一个判断数字输入的公共函数,在每个地方调用不就行了Top

4 楼siyuan79(荔枝(广州新塘))回复于 2001-08-21 15:29:14 得分 0

就是啊!如果你这样都说麻烦哪你不如不写程序啦!Top

5 楼gump2000(阿甘)回复于 2001-08-21 15:30:04 得分 0

假如一个Form中有20个TextBox,我还需要写20个地方的判断啊。  
   
  而且我想让TextBox只响应"0"-"9",   "."的按键  
   
  用用户控件可以解决吗?呵呵,但是还不了解User   Control...FaintTop

6 楼x_bigman(草胚子)回复于 2001-08-21 15:30:59 得分 5

最好用TextBox数组,这样一个窗体上的所有TextBox就只有一个KeyPress事件,用Select   Case   语句去掉那些不需要检测输入的TextBox就好,就更完美了Top

7 楼x_bigman(草胚子)回复于 2001-08-21 15:32:39 得分 0

要给分哟!,别不记得了Top

8 楼gump2000(阿甘)回复于 2001-08-21 15:35:56 得分 0

re   siyuan   79:  
  假如可以更简单而且更有效的办法你喜欢选择哪个?  
  虽然实现的功能的可以一样但是我喜欢简单的。  
   
  re   x_bigman:  
  TextBox数组我用过,但是好像还不是最简单的?(无概念性。。。)  
  我想最好是能用User   Control解决Top

9 楼bamyl(斯文兔)回复于 2001-08-21 15:36:16 得分 2

草胚子的方法不错,如果还不满意你只好自己写个控件,控件里只包含一个你写好捕捉keypress的TextBox,然后用你自己的控件代替textboxTop

10 楼x_bigman(草胚子)回复于 2001-08-21 15:40:37 得分 0

用什么User   Control,你还不如用MaskEdBox,干什么用TextBox。  
  MaskEdBox1.Mask="#########".Top

11 楼bamyl(斯文兔)回复于 2001-08-21 15:44:12 得分 0

x_bigman(草胚子):  
      这样可能不太好,MaskEdBox如果用了Mask好像是要限制输入长度的Top

12 楼x_bigman(草胚子)回复于 2001-08-21 15:46:37 得分 2

你到底想干啥,如果需要大量的文本框输入,那么我还是建议用TextBox加KeyPress的用法,这样系统开销会小些,MaskEdBox归根到底还是基于TextBox的。少用些这些控件多用基本控件可以使你的程序更稳定些,OK。我决定不再回答你这个问题了。加不加分随你。Top

13 楼gump2000(阿甘)回复于 2001-08-21 15:46:59 得分 0

而且无法输入小数点,除非你  
  Mask="###########.##"Top

14 楼gump2000(阿甘)回复于 2001-08-21 15:49:48 得分 0

re   x_bigman:  
   
  老大别生气,程序中数据量输入及其大。  
  所以偶想找一个最简单的解决办法,用TextBox   Array   +   KeyPress  
  Copy一下还是很快的,但是我总以为可以还有更简单的办法的。  
   
  别生气啊。  
  Top

15 楼x_bigman(草胚子)回复于 2001-08-21 15:53:50 得分 0

做事有个性价比,为这么个小问题不值得。Top

16 楼gump2000(阿甘)回复于 2001-08-21 15:57:03 得分 0

呵呵,刚毕业的学生总想完美,见谅。  
   
  不过说实话,现在的程序员是不是只要能达到目的,不会优化的?  
  我见过很多程序都是这样的。(或许只是个人看法)  
   
  Top

17 楼g8341(幄天)回复于 2001-08-21 16:00:53 得分 0

用掩码控件,MSMASK32。OCX   可以固定输入数字需设置MASK属性Top

18 楼ozw(沧浪客)回复于 2001-08-21 16:11:33 得分 2

全部输完以后再Check不行吗?  
  用Isnumeric(Text)就可以判断了  
  或者你自己做一个控件,也很简单的,然后把所有的只能输入数字的Text控件换成你的控件Top

19 楼giszhu(松岛菜鸟子)回复于 2001-08-21 16:22:33 得分 5

你可以将些内容写成一个函数。  
  Private   Sub   GetKeyPress(KeyAscii   As   Integer)  
  Dim   bolT   As   Boolean  
      KeyAscii   =   Asc(UCase$(Chr$(KeyAscii)))  
      If   KeyAscii   =   Asc(".")   Then  
                    Text1.Locked   =   False  
      ElseIf   KeyAscii   =   8   Then     '该键为Back   Space,为了删除  
                    Text1.Locked   =   False  
      ElseIf   KeyAscii   >=   Asc("0")   And   KeyAscii   <=   Asc("9")   Then  
                    Text1.Locked   =   False  
      Else  
                    Text1.Locked   =   True  
      End   If  
  End   Sub  
   
  到时侯可以随时调用  
   
  Private   Sub   Text1_KeyPress(KeyAscii   As   Integer)  
          GetKeyPress   KeyAscii  
  End   Sub  
  Top

20 楼x_bigman(草胚子)回复于 2001-08-21 16:23:16 得分 4

这是一个很优化的方案,你想想你就算用User   Control,也不是达到这样的目的。同时如果  
  你又想只让他输入字母,或在一定位置输入数字,一定位置输入字母,是不是又要改User    
  Control,是不是每种情况你都要编一个User   Control。这样是把程序搞复杂还是简单了。  
  你还想不想让人看懂你的程序。Top

21 楼gump2000(阿甘)回复于 2001-08-21 16:30:32 得分 0

我个人是这样认为的:  
  全部在User   Control写完以后,调用会是很简单的  
  比如以后还需要用到的话,是很简单就可以用的。  
   
  刚毕业,脑袋里奇怪的想法多得很。  
   
  总之,以后还请大家多多帮忙。Top

22 楼gump2000(阿甘)回复于 2001-08-21 17:07:03 得分 0

Public   Sub   CheckKeyPress(TargetTextBox   As   TextBox,   KeyAscii   As   Integer,   Optional   DecimalCount   As   Integer   =   2)  
   
          KeyAscii   =   Asc(UCase$(Chr$(KeyAscii)))  
           
          If   KeyAscii   =   Asc("-")   And   TargetTextBox.SelStart   =   0   Then  
                  TargetTextBox.Locked   =   False  
          ElseIf   KeyAscii   =   Asc(".")   And   InStr(TargetTextBox.Text,   ".")   =   0   Then  
                  TargetTextBox.Locked   =   False  
          ElseIf   KeyAscii   =   8   Then  
                  TargetTextBox.Locked   =   False  
          ElseIf   KeyAscii   >=   Asc("0")   And   KeyAscii   <=   Asc("9")   And   _  
                  ((InStr(TargetTextBox.Text,   ".")   >   0   And   _  
                  (Len(TargetTextBox.Text)   -   InStr(TargetTextBox.Text,   "."))   <   DecimalCount)   Or   _  
                  InStr(TargetTextBox.Text,   ".")   =   0)   Then  
                          TargetTextBox.Locked   =   False  
          Else  
                  TargetTextBox.Locked   =   True  
          End   If  
  End   Sub  
   
   
  优化一下,呵呵Top

相关问题

  • 数字型数据输入问题
  • 送分(初学者)关于输入数字型数据的合法性验证
  • 如何判断Text控件里输入的是非数字型数据?
  • 关于DB控件输入数字型数据的长度控制问题
  • PB中写入EXCEL数字型数据的控制问题
  • 如何把字符型数据转换数字型!
  • 怎么从ACCESS里读出一条数字型的数据啊?
  • select …… like 能不能用来查询数字型数据??????
  • 请问在sql中是否可以判断输入的参数为数字型
  • 问一个初级的问题:socket如何发送数字型数据

关键词

  • 控件
  • 数据
  • 数字
  • 解决
  • keyascii
  • maskedbox
  • textbox
  • 输入
  • bigman
  • keypress

得分解答快速导航

  • 帖主:gump2000
  • x_bigman
  • bamyl
  • x_bigman
  • ozw
  • giszhu
  • x_bigman

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo