我编写了一个表单,它在将文本输入到文本框中时异步执行查询,但是我似乎有些随意地抛出了以下错误:“除非控件具有焦点,否则您无法引用控件的属性或方法。”
直接相关的代码是:
Dim UpdateRequested As Boolean
Dim qryText As String
.
.
.
Private Sub txtBox_Change()
qryText = txtBox.Text
UpdateRequested = true
End Sub
省略号中的某些地方是处理动态加载 ADODB 记录集、填充本地表和刷新子表单的代码。但是,即使我禁用此代码,问题仍然存在:有时我会收到错误消息。有时我没有。
通过关闭数据库并重新打开它,这似乎是持久的。每次它再次开始工作时,都是因为我一直在调试器中乱搞代码,但我不确定究竟是什么导致它神奇地“正常工作”或者是什么导致它根本不工作。
更新
为了让事情更令人费解,我添加了几个简单的事件处理程序:
Private Sub txtBox_GotFocus()
MsgBox "Got focus"
End Sub
Private Sub txtBox_LostFocus()
MsgBox "Lost focus"
End Sub
我运行表格。我点击测试框。我收到“获得焦点”消息。一旦我输入,我就会看到如上所述的错误。如果我重新打开表单,我可以在有问题的文本框(它本身是未绑定的)和子表单中的绑定文本框之间单击,并按预期看到“获得焦点”和“失去焦点”消息。此外,显示当前值为“Screen.ActiveControl.Name”的消息框会在访问 Text 属性之前显示预期的名称。