一个软件在能够完成基本的功能的基础上,要让客户有更好的用户体验。优化是重中之重。在第一次验项目时,师傅给我指出了很多问题。尤其是文本框的问题最大,而且任务量还繁多。所以我就从它先下手。虽然比较麻烦,但是很多不同窗体里的文本框text都是一样的问题。本质不变,只需要改下名字就好。下面是几类问题
问题一:限制文本框输入字符个数
解决办法
1、直接在text文本框属性中定义MaxLength的值,MaxLength是设置文本框允许输入的字符最大数。超过设置数后,将不允许继续输入内容。
2.通过代码
Private Sub Text1_Change()
If Len(Text1) >= 10 Then MsgBox "你已经输入了10个字,已到最大字符数!"
End Sub
问题二:限制文本框输入的必须是数字
解决办法
Private Sub Text1_KeyPress(KeyAscii As Integer)
If (KeyAscii < 48 Or KeyAscii > 57) Then
End if
End sub
问题三:限制文本数字范围0-100(在问题二的基础上)
遇到的问题
Private Sub txtResult_LostFocus()
Dim v As Integer
If (AscW(txtResult) < 48 Or AscW(txtResult) > 57 ) Then
MsgBox "请输入数字", vbOKOnly + vbExclamation, "警告"
txtResult.Text = ""
txtResult.SetFocus
Else
v = Val(txtResult.Text)
If v < 0 Or v > 100 Then
MsgBox "请输入0-100的数字", vbOKOnly + vbExclamation, "警告"
txtResult.Text = ""
txtResult.SetFocus
End If
End If
End Sub
刚开始我想的是既限制只能数字,又限制输入数字必须在0-100,刚开始我的代码是这样的,将这两点简单的糅合在一起,虽然能够简单的实现功能,但是又一个特别棘手的问题,如果光标移到这个文本框,但是没有输入任何字符,再将光标移开就会出现错误。
报错:实时错误5 无效的过程调用或参数
If (AscW(txtResult) < 48 Or AscW(txtResult) > 57 Or txtResult.Text = "") Then
显示该代码错误,通过代码我明白if条件语句中只有是数字和不是数字两种情况,缺少了第三种情况———文本框中没有任何字符。于是我将两种不是数字的情况放在了同一个if语句中,if语句条件改为下面的代码。
'如果不是数字或者也没有输入任何字符。
If (AscW(txtResult) < 48 Or AscW(txtResult) > 57 Or txtResult.Text = "") Then
但是问题并不是这么简单的好解决的,还是报错,错误原因一样。于是我开始在网上查,但是没有找到结果。然后我就放弃了在网上查,我就自己想办法,既然自己知道问题出在了哪里,那就自己解决呗!我换了另一种思路,将输入不是数字和没有输入任何字符这两种情况分开写,放在两个if语句中,结果就能运行了。
解决办法
Private Sub txtResult_LostFocus()
Dim v As Integer
If txtResult.Text <> "" Then
If (AscW(txtResult.Text) < 48 Or AscW(txtResult.Text) > 57) Then
MsgBox "请输入数字", vbOKOnly + vbExclamation, "警告"
txtResult.Text = ""
txtResult.SetFocus
Else
v = Val(txtResult.Text)
If v < 0 Or v > 100 Then
MsgBox "请输入0-100的数字", vbOKOnly + vbExclamation, "警告"
txtResult.Text = ""
txtResult.SetFocus
End If
End If
Else
MsgBox "成绩不能为空", vbOKOnly + vbExclamation, "警告"
End If
End Sub
这件事也给我我一个教训,有时候遇到不会的,应该多动脑子,先试试自己能不能解决。虽然搜索引擎是一个好东西,但是先要尝试自己解决,不要让脑子成为一块石头。
问题四:下拉列表文本框不可键盘输入
解决方法
Private Sub ComboBox1_KeyPress(KeyAscii As Integer)
KeyAscii = 0
End Sub