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
在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
按gemgama(gemgama) 的函数,修改一下,将你认为合法的键保留就行。
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和.其它都不能按,一按就是非法字符!希望高手能够解决!
响应KeyPress事件,如果按下的不是"0"-"9"或"."那么keyascii=0
不好意思,中午上班了,现在再来修改一下: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
响应KeyPress事件,如果按下的不是"0"-"9"或"."那么keyascii=0
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
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 键
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
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和.其它都不能按,一按就是非法字符!希望高手能够解决!
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
它与文本框(TEXT BOX)功能基本相似,但多了一个MASK属性,MASK属性常用的设定如下:
#—限定仅能输入数字0~9;
A— 限定输入为英文字符及数字;
?—限定仅能输入英文字符;
.—限定小数点位置;
:—限定时间分隔号;
/—限定日期分隔号
不需编写代码,只要在设计时将格式化文本框对象(MASKED EDIT)的MASK属性设计好所需格式即可。比如 #######.##可输入12.3或123456.78但不能输入字母或其他字符但你必须考虑你输入的数字的位数,例如,如果把mask属性设为###.##,那么就只可以输入123.45,而不能输入1234.56,所以,最好把位数设得足够多。