【机房重构】--VB.NET限制文本框类型为数字

前端之家收集整理的这篇文章主要介绍了【机房重构】--VB.NET限制文本框类型为数字前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

问题

机房重构的过程中涉及到数据类的文本框,比如说基本数据设定,充值金额等,是不允许输入除了数字以外的类型的,因为一旦输入肯定会因为数据类型问题报错。

方法

在模块中写一个公共方法

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@

总结

因为经常要用到这个方法,所以抽象出来调用的时候感觉超级爽。

猜你在找的VB相关文章