问题
机房重构的过程中涉及到数据类的文本框,比如说基本数据设定,充值金额等,是不允许输入除了数字以外的类型的,因为一旦输入肯定会因为数据类型问题报错。
方法
在模块中写一个公共方法
Module@H_404_11@ CheckTextBox
'以下代码控制TextBox控件只能输入数值型字符串,具体内容如下: @H_404_11@
Public@H_404_11@ Sub@H_404_11@ CheckKeyPress(ByVal@H_404_11@ TargetTextBox As@H_404_11@ TextBox,ByVal@H_404_11@ e As@H_404_11@ System.Windows.Forms.KeyPressEventArgs,Optional@H_404_11@ ByVal@H_404_11@ Minus As@H_404_11@ Boolean@H_404_11@ = False@H_404_11@,Optional@H_404_11@ ByVal@H_404_11@ DecimalCount As@H_404_11@ Integer@H_404_11@ = 1@H_404_11@)
Dim@H_404_11@ blnHandled As@H_404_11@ Boolean@H_404_11@
blnHandled = False@H_404_11@
Select@H_404_11@ Case@H_404_11@ Asc(e.KeyChar)
Case@H_404_11@ Asc("-"@H_404_11@) ' 负号:只能在最前头 @H_404_11@
If@H_404_11@ Not@H_404_11@ (TargetTextBox.SelectionStart = 0@H_404_11@ And@H_404_11@ Minus = True@H_404_11@) Then@H_404_11@ blnHandled = True@H_404_11@
Case@H_404_11@ Asc("."@H_404_11@) ' . 小数点:小数位数大于0;在字符串中没有“.”,且加了“.”后小数位能满足要求 @H_404_11@
If@H_404_11@ DecimalCount <= 1@H_404_11@ Then@H_404_11@
blnHandled = True@H_404_11@
Else@H_404_11@
If@H_404_11@ Not@H_404_11@ (InStr(TargetTextBox.Text@H_404_11@,"."@H_404_11@) = 1@H_404_11@ And@H_404_11@ (Len(TargetTextBox.Text@H_404_11@) - TargetTextBox.SelectionStart <= DecimalCount)) Then@H_404_11@ blnHandled = True@H_404_11@
End@H_404_11@ If@H_404_11@
Case@H_404_11@ 8@H_404_11@ '退格键, @H_404_11@
Case@H_404_11@ 13@H_404_11@ ' 回车键 @H_404_11@
SendKeys.Send("{TAB}"@H_404_11@) '转为tab键 @H_404_11@
Case@H_404_11@ Asc("0"@H_404_11@) To@H_404_11@ Asc("9"@H_404_11@) ' 0-9 @H_404_11@
If@H_404_11@ InStr(TargetTextBox.Text@H_404_11@,"."@H_404_11@) > 1@H_404_11@ Then@H_404_11@
If@H_404_11@ TargetTextBox.SelectionStart > InStr(TargetTextBox.Text@H_404_11@,"."@H_404_11@) - 1@H_404_11@ Then@H_404_11@
' 当前字符位置在小数点后,则小数点后的字符数必须小于小数位 @H_404_11@
If@H_404_11@ Len(TargetTextBox.Text@H_404_11@) - InStr(TargetTextBox.Text@H_404_11@,"."@H_404_11@) + 1@H_404_11@ > DecimalCount Then@H_404_11@ blnHandled = True@H_404_11@
End@H_404_11@ If@H_404_11@
End@H_404_11@ If@H_404_11@
Case@H_404_11@ Else@H_404_11@
blnHandled = True@H_404_11@
End@H_404_11@ Select@H_404_11@
e.Handled = blnHandled
End@H_404_11@ Sub@H_404_11@
需要调用的文本框
以基本数据设定窗体为例
Private@H_404_11@ Sub@H_404_11@ txtLeastCash_KeyPress(sender As@H_404_11@ Object@H_404_11@,e As@H_404_11@ KeyPressEventArgs) Handles@H_404_11@ txtLeastCash.KeyPress
CheckTextBox.CheckKeyPress(sender,e,False@H_404_11@,1@H_404_11@)
End@H_404_11@ Sub@H_404_11@
Private@H_404_11@ Sub@H_404_11@ txtPreTime_KeyPress(sender As@H_404_11@ Object@H_404_11@,e As@H_404_11@ KeyPressEventArgs) Handles@H_404_11@ txtPreTime.KeyPress
CheckTextBox.CheckKeyPress(sender,1@H_404_11@)
End@H_404_11@ Sub@H_404_11@
Private@H_404_11@ Sub@H_404_11@ txtStaUnit_KeyPress(sender As@H_404_11@ Object@H_404_11@,e As@H_404_11@ KeyPressEventArgs) Handles@H_404_11@ txtStaUnit.KeyPress
CheckTextBox.CheckKeyPress(sender,1@H_404_11@)
End@H_404_11@ Sub@H_404_11@