如何最简单实现一个TextBox中只能输入数字型数据?
一定要自己获取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




