这两天在编写一个应用程序,碰到要输入数量和金额,现在的text控件不能够过滤非法字符,现在有没有谁有这样的一个控件,只能输入数字和小数点(最多一个小数点)的控件

解决方案 »

  1.   

    自己作一个不久行了
    响应KeyPress事件,如果按下的不是"0"-"9"或"."那么keyascii=0
      

  2.   

    設屬性剛試了下不行。。Sorry
      

  3.   

    Dim KeyDecimal As IntegerPrivate Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii < 46 Or KeyAscii > 57 Or KeyAscii = 47 Then
        MsgBox "非法数字!": KeyAscii = 0
    End IfIf KeyAscii = 46 Then
        KeyDecimal = KeyDecimal + 1
            If KeyDecimal > 1 Then MsgBox " 出现两个小数点": KeyAscii = 0
    End If
      
    End Sub
      

  4.   

    回车符的值是 13键码常数 值 描述 
    vbKeyLButton 1 鼠标左键 
    vbKeyRButton 2 鼠标右键 
    vbKeyCancel 3 CANCEL 键 
    vbKeyMButton 4 鼠标中键 
    vbKeyBack 8 BACKSPACE 键 
    vbKeyTab 9 TAB 键 
    vbKeyClear 12 CLEAR 键 
    vbKeyReturn 13 ENTER 键 
    vbKeyShift 16 SHIFT 键 
    vbKeyControl 17 CTRL 键 
    vbKeyMenu 18 菜单键 
    vbKeyPause 19 PAUSE 键 
    vbKeyCapital 20 CAPS LOCK 键 
    vbKeyEscape 27 ESC 键 
    vbKeySpace 32 SPACEBAR 键 
    vbKeyPageUp 33 PAGEUP 键 
    vbKeyPageDown 34 PAGEDOWN 键 
    vbKeyEnd 35 END 键 
    vbKeyHome 36 HOME 键 
    vbKeyLeft 37 LEFT ARROW 键 
    vbKeyUp 38 UP ARROW 键 
    vbKeyRight 39 RIGHT ARROW 键 
    vbKeyDown 40 DOWN ARROW 键 
    vbKeySelect 41 SELECT 键 
    vbKeyPrint 42 PRINT SCREEN 键 
    vbKeyExecute 43 EXECUTE 键 
    vbKeySnapshot 44 SNAP SHOT 键 
    vbKeyInser 45 INS 键 
    vbKeyDelete 46 DEL 键 
    vbKeyHelp 47 HELP 键 
    vbKeyNumlock 144 NUM LOCK 键 
    A 键到 Z 键与其 ASCII 码的相应值'A' 到 'Z' 是一致的
    常数 值 描述 
    vbKeyA 65 A 键 
    vbKeyB 66 B 键 
    vbKeyC 67 C 键 
    vbKeyD 68 D 键 
    vbKeyE 69 E 键 
    vbKeyF 70 F 键 
    vbKeyG 71 G 键 
    vbKeyH 72 H 键 
    vbKeyI 73 I 键 
    vbKeyJ 74 J 键 
    vbKeyK 75 K 键 
    vbKeyL 76 L 键 
    vbKeyM 77 M 键 
    vbKeyN 78 N 键 
    vbKeyO 79 O 键 
    vbKeyP 80 P 键 
    vbKeyQ 81 Q 键 
    vbKeyR 82 R 键 
    vbKeyS 83 S 键 
    vbKeyT 84 T 键 
    vbKeyU 85 U 键 
    vbKeyV 86 V 键 
    vbKeyW 87 W 键 
    vbKeyX 88 X 键 
    vbKeyY 89 Y 键 
    vbKeyZ 90 Z 键 
    0 键到 9 键与其 ASCII 码的相应值 '0' 到 '9' 是一致的
    常数 值 描述 
    vbKey0 48 0 键 
    vbKey1 49 1 键 
    vbKey2 50 2 键 
    vbKey3 51 3 键 
    vbKey4 52 4 键 
    vbKey5 53 5 键 
    vbKey6 54 6 键 
    vbKey7 55 7 键 
    vbKey8 56 8 键 
    vbKey9 57 9 键 
    数字小键盘上的键
    常数 值 描述 
    vbKeyNumpad0 96 0 键 
    vbKeyNumpad1 97 1 键 
    vbKeyNumpad2 98 2 键 
    vbKeyNumpad3 99 3 键 
    vbKeyNumpad4 100 4 键 
    vbKeyNumpad5 101 5 键 
    vbKeyNumpad6 102 6 键 
    vbKeyNumpad7 103 7 键 
    vbKeyNumpad8 104 8 键 
    vbKeyNumpad9 105 9 键 
    vbKeyMultiply 106 乘号 (*) 键 
    vbKeyAdd 107 加号 (+) 键 
    vbKeySeparator 108 ENTER 键(在数字小键盘上) 
    vbKeySubtract 109 减号 (-) 键 
    vbKeyDecimal 110 小数点 (.) 键 
    vbKeyDivide 111 除号 (/) 键 
    功能键
    常数 值 描述 
    vbKeyF1 112 F1 键 
    vbKeyF2 113 F2 键 
    vbKeyF3 114 F3 键 
    vbKeyF4 115 F4 键 
    vbKeyF5 116 F5 键 
    vbKeyF6 117 F6 键 
    vbKeyF7 118 F7 键 
    vbKeyF8 119 F8 键 
    vbKeyF9 120 F9 键 
    vbKeyF10 121 F10 键 
    vbKeyF11 122 F11 键 
    vbKeyF12 123 F12 键 
    vbKeyF13 124 F13 键 
    vbKeyF14 125 F14 键 
    vbKeyF15 126 F15 键 
    vbKeyF16 127 F16 键 
      

  5.   

    在KEYPRESS事件里判断的话检测不到粘贴,就是可以粘贴进非法字符。Public Sub SetNumber(obj As TextBox, PointNum As Integer, Optional SignFlag As Boolean = True)
        If IsNumeric(obj.Text) And InStr(StrReverse(obj.Text), ".") <= PointNum + 1 And (IIf(SignFlag, InStr(obj.Text, "+") = 0 And InStr(StrReverse(obj.Text), "-") <> 1, True)) And IIf(SignFlag And Val(obj.Text) = 0, InStr(obj.Text, "-") = 0, True) And InStr(obj.Text, "&") = 0 Then
            obj.Tag = obj.Text
        Else
            If obj.Text <> "" Then obj.Text = obj.Tag
        End If
    End Sub第一个参数为进行限制的TEXT控件,第二个参数为小数位数,第三个参数为是否限制正号(默认为限制)把此函数写在TEXT控件的CHANGE事件里就行:SetNumber Text1, 2
      

  6.   

    按gemgama(gemgama) 的函数,修改一下,将你认为合法的键保留就行。
      

  7.   

    Dim KeyDecimal As IntegerPrivate Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii < 46 Or KeyAscii > 57 Or KeyAscii = 47 Then
        MsgBox "非法数字!": KeyAscii = 0
    End IfIf KeyAscii = 46 Then
        KeyDecimal = KeyDecimal + 1
            If KeyDecimal > 1 Then MsgBox " 出现两个小数点": KeyAscii = 0
    End If
      
    End Sub局限太多,没法用回车键和退格键,基本上出了0~9和.其它都不能按,一按就是非法字符!希望高手能够解决!
      

  8.   

    响应KeyPress事件,如果按下的不是"0"-"9"或"."那么keyascii=0
      

  9.   

    不好意思,中午上班了,现在再来修改一下:Dim KeyDecimal As IntegerPrivate Sub Text1_KeyPress(KeyAscii As Integer)
    If (KeyAscii < 46 And KeyAscii > 13) Or (KeyAscii < 13 And KeyAscii > 8) _
        Or KeyAscii > 57 Or KeyAscii = 47 Or KeyAscii < 8 Then
                MsgBox "非法数字!":  KeyAscii = 0
    End IfIf KeyAscii = 46 Then
        KeyDecimal = KeyDecimal + 1
            If KeyDecimal > 1 Then MsgBox " 出现两个小数点": KeyAscii = 0
    End If
      
    End Sub
      

  10.   

    工程-》部件-》选择“microsoft masked edit control 6.0(sp3)”.
    它与文本框(TEXT BOX)功能基本相似,但多了一个MASK属性,MASK属性常用的设定如下:
           #—限定仅能输入数字0~9;
           A— 限定输入为英文字符及数字;
           ?—限定仅能输入英文字符;
           .—限定小数点位置;
           :—限定时间分隔号;
           /—限定日期分隔号
        不需编写代码,只要在设计时将格式化文本框对象(MASKED EDIT)的MASK属性设计好所需格式即可。比如 #######.##可输入12.3或123456.78但不能输入字母或其他字符但你必须考虑你输入的数字的位数,例如,如果把mask属性设为###.##,那么就只可以输入123.45,而不能输入1234.56,所以,最好把位数设得足够多。
      

  11.   

    各位,考虑到工程分发的问题,如果自己能做的比较简单的功能尽量自己做,少用控件,这是一个优秀程序员的特点。楼上几位所提出的都是在KEYPRESS事件里写代码,在前面的回贴中我已经说了,如果这样做的话,是检测不到粘贴事件的,也就是可以粘贴进非法的字符。前面的回贴中我定义了一个函数,只要在CHANGE事件里调用这个函数就行了。大家可以试一试,非常好用。