在优化学生系统时大家都遇到过这样的问题吧:修改信息类的窗口当数据库中无数据时将本窗口hide或unload,然后show本类信息的add(添加信息)窗口,或是运行后使add窗口在修改窗口上面显示,而实际往往是add窗口显示在修改窗口后面,或是修改窗口根本无法hide或unload,还有种情况就是一直出提示框,一直循环。用户体验极差。通过调试我们发现不执行hide或unload语句,代码示例如下:
If mrc.EOF = False Then
mrc.MoveFirst
Call viewData
myBookmark = mrc.Bookmark
Else
MsgBox "??м????????????????", vbOKOnly + vbExclamation, "????"
If str1 = vbOK Then
frmAddclassinfo.Show
frmModifyclassinfo.Hide '????д??
Exit Sub
End If
End If
无论在form_load中还是在信息修改、删除等的click中,均会出现上述问题。自我总结问题原因如下:load 或click 事件中,都是在本窗口运行的,当本窗口hide或unload后代码不在运行,导致后面代码不在执行,然而后面的代码又是必须要执行的,所以电脑通过跳过关闭窗口来保证后面代码运行。
解决角度:窗口先运行再判断会使判断受运行的束缚,导致判断必需在运行的基础上才能执行判断后的代码,既然想在判断完后可以实现关闭此窗口的功能,那就应该使判断脱离窗口,即在窗口运行前先判断,也就是说可以在主窗体的个窗体click
show中加判断:在窗体show之前判断要不要添加信息,严谨起见,代码示例中的判断保留,防止在运行修改窗口时删除所有信息后程序不再响应,影响用户体验。代码示例如下:
Private Sub ????????_Click()
Dim txtsql As String
Dim msgtext As String
Dim mrc As ADODB.Recordset
Dim a
txtsql = "select * from result_Info"
Set mrc = ExecuteSQL(txtsql, msgtext)
If mrc.EOF = True Then
a = MsgBox("???????????????????", vbOKCancel + vbExclamation, "????")
If a = vbOK Then
frmaddresult.Show
Exit Sub
Else
End If
Else
frmmodifyresult.Show
End If
End Sub
还可以在修改窗口form_load 中将判断去掉,看看会有什么情况发生,本人还没试过。
通过此问题,我意识到了代码执行先后顺序的重要性,有时可能就因为一个代码行的上下先后问题导致我们想要的效果没有看到,所以还是多去探索吧。