优化的过程中,发现如果将信息填写完整后再提示已经存在账号或是询问是否激活卡号太费事,有种费力不讨好的感觉,所以,就想刚刚输入卡号就给出提示,期初我用的是keypress事件,后发现运行时反应慢半拍,输入卡号1,在点击一下别的按键或是点击一下去控件按钮才能给出提示,所以,就思考是不是选择的事件存在问题,就尝试了一下keydown事件,后发现还是老样子,只好去试试keyup,结果暂时令人惊喜,如下:
于是,我猜测这三个时间就是反应周期的区别,为了验证猜想,去百度了一下:正如三者的字面意思:http://blog.sina.com.cn/s/blog_5e3a1bbb0100esv3.html
KeyDown:在控件有焦点的情况下按下键时发生。
KeyPress:在控件有焦点的情况下按下键时发生。
KeyUp:在控件有焦点的情况下释放键时发生。
后发现,如果卡号是两位数,那么刚输入第一位就弹出提示框了,这样的话我的优化是没有任何义的,所以,只好改变思维——焦点问题,失去焦点再弹出提示框不就行了吗?也可以免去输入完整信息后再验证的麻烦,代码实现如下:
Private Sub txtCardNo_LostFocus()
Dim mrcS As ADODB.Recordset
Dim txtsql As String
Dim MsgText As String
txtsql = "select * from Student_Info where cardno='" & Trim(txtCardNo.Text) & "' and status='" & Trim("使用") & "'"
If mrcS.EOF = False Then
txtCardNo.SetFocus
txtCardNo.Text = ""
End if
End Sub
解决了这个问题后,又在优化的过程中有了新的发现,是关于焦点问题的另一发现,导致上边的优化显得有点疏漏(不过,能发现就很好了,自我感觉,而且人在填写信息的时候,固有的思维貌似都是从头开始填的,所以,关于注册部分的“焦点优化”,就先不管了)
其实,觉得和功能实现比起来,我还是喜欢优化,优化的过程就是为人民服务的“思考”过程,人总是喜欢追求尽善尽美,无疑这就是一份钟爱……