|
楼主 |
发表于 2009-3-25 08:07
|
显示全部楼层
第8部分 控件的应用
技巧98 限制文本框的输入
用户在使用文本框输入数据时,往往希望能限制输入数据的类型,比如只能输入数字。但是没有内置的属性能限制在文本框中只能输入数字,只能在文本框的事件过程中使用代码来测试输入的是哪类字符,然后只允许输入数字字符和一个“-”号、一个“.”号,如下面的代码所示。- #001 Private Sub TextBox1_KeyPress(ByVal KeyANSI As MSForms.ReturnInteger)
- #002 Select Case KeyANSI
- #003 Case Asc("0") To Asc("9")
- #004 Case Asc("-")
- #005 If InStr(1, Me.TextBox1.Text, "-") > 0 Or _
- #006 Me.TextBox1.SelStart > 0 Then
- #007 KeyANSI = 0
- #008 End If
- #009 Case Asc(".")
- #010 If InStr(1, Me.TextBox1.Text, ".") > 0 Then
- #011 KeyANSI = 0
- #012 End If
- #013 Case Else
- #014 KeyANSI = 0
- #015 End Select
- #016 End Sub
复制代码 代码解析:
文本框的KeyPress事件过程,测试键盘输入的是哪类字符,只允许输入数字字符和一个“-”号、一个“.”号。
KeyPress事件的语法如下:
Private Sub object_KeyPress( ByVal KeyANSI As MSForms.ReturnInteger)
参数Object是必需的,一个有效的对象。
参数KeyANSI是可选的,整数值,代表标准的数字ANSI 键代码。
第2行代码使用Case Else语句测试文本框KeyPress事件的KeyANSI参数值。
第3行代码,如果键盘输入的是0到9之间的数字字符,则允许输入。如果想在文本框中允许其它类型的字符输入,在此句代码中列出允许输入的字符即可。
第4行到第8行代码,如果键盘输入的是“-”号,先使用InStr函数测试文本框中是否已有“-”号,如果InStr函数返回值大于0,说明文本框中已有“-”号。接下来使用文本框的SelStart 属性来测试插入点,如果文本框的SelStart 属性值大于0,说明“-”号的插入点不是第一个。如果以上两个条件中有任何一个成立,将KeyAscii参数值设置为0,使文本框只能在第一位输入一个“-”号。
第9行到第12行代码,如果键盘输入的是“.”号的话,使用InStr函数测试文本框中是否已有“.”号,如果已有“.”号,将KeyAscii参数值设置为0,使文本框只能输入一个“.”号。
第13、14行代码,如果键盘输入的是其他字符则将KeyAscii参数值设置为0,使文本框不能输入其他字符。
经过以上设置文本框只允许输入数字字符和一个“-”号、一个“.”号,但是能输入中文字符。如果希望限制中文字符的输入,可以在文本框的Change事件中进行设置,如下面的代码所示。- #001 Private Sub TextBox1_Change()
- #002 Dim i As Integer
- #003 Dim s As String
- #004 With TextBox1
- #005 For i = 1 To Len(.Text)
- #006 s = Mid(.Text, i, 1)
- #007 Select Case s
- #008 Case ".", "-", "0" To "9"
- #009 Case Else
- #010 .Text = Replace(.Text, s, "")
- #011 End Select
- #012 Next
- #013 End With
- #014 End Sub
复制代码 代码解析:
文本框的Change事件,判断输入的字符是否为数字字符和“-”号、“.”号,如果不是则使用Replace函数将文本框中输入的其他字符替换成空白。
第5、6行代码在文本框输入的所有字符中循环。
第8行代码列出允许输入的字符。如果想在文本框中允许其它字符输入,在此句代码中列出即可。
第9、10行代码,如果不是允许输入的字符,使用Replace函数替换成空白。
经过以上的设置,文本框中只能在第一位输入一个“-”号、一个“.”号和“0”到“9”的数字。 |
|