分享我的自定义函数,还有一个环节有待解决.
我写了一个函数,用于在文本框中输入字符时进行验证,可以在文本框的keypress事件中进行调用.
调用方式为:
Private Sub txtzyzs_KeyPress(KeyAscii As Integer)
    KeyAscii = ghprog.numonly2(KeyAscii, txtzyzs.Text)
End Sub该函数代码如下:
Public Function numonly2(KeyAscii As Integer, str As String) As Integer
    '返回值有两种可能,数字合法组合返回该数值,不合法返回0
    
    str = Trim(str)    Select Case KeyAscii
    Case 8, 9, 13, &H30 To &H39
        numonly2 = KeyAscii    Case 45             '负号[只充许字符的第一个字符是负号]
        If str = "" Then
            numonly2 = KeyAscii
        Else
            numonly2 = 0
        End If
    
    Case 46             '小数点处理[前面字符中没有小数点则可以输入]
        If IsNumeric(str) = True And InStr(1, str, ".") = 0 Then
            numonly2 = KeyAscii
        Else
            numonly2 = 0
        End If
        
    Case Else
        numonly2 = 0
    End Select
End Function----------------
现在还有一个问题没有解决,就是当输入了数字后,再补第一个负号,就补不进去了.只能在没输入任何字符的情况下才能输入负号.可是我想实现可以后补负号的情况,可是想了半天也想不出实现办法.
请大家帮我完善.
谢谢.

解决方案 »

  1.   

    在TextChange事件里使用IsNumeric函数不就能解决问题吗?
      

  2.   

    ?isnumeric("78777-")
    True
    -----------------
    你试一下能用这个判断吗?
    哈哈.
      

  3.   

    "78777-"和"78777+"是一种正、负数表示方式,你把“-”变成其它字符试试?
    -------------
    谢谢回复,不过好象不是呀,请看下面:
    ?val("78434-")
     78434 
    可见vb并没有把最后一个负号做为负号处理.
      

  4.   

    //"78777-"和"78777+"是一种正、负数表示方式,你把“-”变成其它字符试试?
    //-------------
    //谢谢回复,不过好象不是呀,请看下面:
    //?val("78434-")
    // 78434 
    //可见vb并没有把最后一个负号做为负号处理.Val函数是取出字符串中的数字,即使后面不是-号,也会取出78434IsNumeric函数也有点问题,例如
      ?IsNumeric("0E23")
      True
      ?IsNumeric("0F23")
      False另外,在KeyPress事件中只能控制输入的是否为数字,但如果是使用复制粘贴方式,就控制不了如果只是为了控制输入,以下有一个简单的方法,但需要注意的是只允许输入正整数(小数点和负号输入不了)
    Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const ES_NUMBER = &H2000&
    Public Const GWL_STYLE = (-16)
    Sub TBNumOnly(txtBox As TextBox)
        Dim lStyle                  As Long
        lStyle = GetWindowLong(txtBox.hwnd, GWL_STYLE)
        lStyle = lStyle Or ES_NUMBER
        lStyle = SetWindowLong(txtBox.hwnd, GWL_STYLE, lStyle)
    End Sub
      

  5.   

    那这个呢?
    ?IsNumeric("0D23")
    True