今天在写机房个人重构时,又再次遇到了之前的老问题,如何控制文本框内只输入数字,对此问题总结了下面的几种方法
记得在用VB6.0 编写机房收费系统的时候这个问题挺容易的,现在换成了.NET 处理方法有点不同了,在不同的基础上,我又用了别的方法也解决了这个问题!
首先我们都知道键盘上每个键都有它自己的ASCII 码值,所以只需要控制ASCII码值是什么也就能通过keypress 事件来处理一系列问题了。ASCII码表通过百度就可以搜索到,这里我就不列出来了,我在写系统时,对文本框要求只能输入数字和空格,于是我需要的到他们的ASCII码值, 数字的范围是48~57 而backspace 的值是8 这样只需要满足这两个条件就可以了
下面是我在用VB6.0时实现的代码
Private Sub txtCash_KeyPress(KeyAscii As Integer) '限制输入的金额只能是数字 If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 MsgBox "只能输入数字!,请重新输入!", vbOKOnly + vbExclamation, "警告" txtCash.SetFocus End If End Sub
1. 输入后在判断
输入后控制就是在文本框内数据都输入完成后判断所输入的是否全是数字 ,代码如下
If IsNumeric(txtCash.Text) = False Then ' MsgBox("请在金额中输入有效数字值") ' txtCash.Focus() ' txtCash.SelectAll() ' Exit Sub ' End If但是我觉着这样会很费时间,因为这是需要在程序运行后才能知道的, 而不是输入时就知道自己输入错了
2.输入时判断
我采用了这中方法,可以再输入时就判断,代码如下:
Private Sub txtCash_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtCash.KeyPress If Char.IsNumber(e.KeyChar) Or e.KeyChar = Chr(Keys.Back) Then '退格应该允许。 Return Else MsgBox("请输入数字") e.Handled = False End If e.Handled = True End Sub
而e.Handled 是返回boolean 表示该事件是否被处理过了
这样就实现了我的需求,以上就是我对这个问题的处理方法! 特此分享! 欢迎指正!