Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 具有可见控件的窗体是否可以没有具有焦点的控件?_Vba_Ms Access - Fatal编程技术网

Vba 具有可见控件的窗体是否可以没有具有焦点的控件?

Vba 具有可见控件的窗体是否可以没有具有焦点的控件?,vba,ms-access,Vba,Ms Access,我有一些使用ActiveControl属性的Access VBA代码。如果碰巧没有焦点控制,则会抛出错误。如果总是有可见的控件可以聚焦,我需要担心吗?也就是说,在一种总是有控件可以具有焦点的形式中,有没有任何方法可以使没有控件具有焦点 我看到其他一些关于相关问题的帖子。它们似乎表明,唯一的方法(如果我想使用VBA来阻止任何控件具有焦点)是将焦点设置为某个物理隐藏(但visible=True)控件。这意味着没有控制就没有办法聚焦。但是我想明确地问这个问题。否。如果窗体具有可见且已启用的控件(!),

我有一些使用ActiveControl属性的Access VBA代码。如果碰巧没有焦点控制,则会抛出错误。如果总是有可见的控件可以聚焦,我需要担心吗?也就是说,在一种总是有控件可以具有焦点的形式中,有没有任何方法可以使没有控件具有焦点


我看到其他一些关于相关问题的帖子。它们似乎表明,唯一的方法(如果我想使用VBA来阻止任何控件具有焦点)是将焦点设置为某个物理隐藏(但visible=True)控件。这意味着没有控制就没有办法聚焦。但是我想明确地问这个问题。

否。如果窗体具有可见且已启用的控件(!),则其中一个控件将始终具有焦点,如果窗体具有焦点


尽管如此,如果没有控制(因为3年后,有人决定必须禁用所有控制)或意外控制(有人后来添加),您应该练习防御性编程,不要让代码崩溃是活动窗体。

您肯定可以拥有一个活动窗体,该窗体具有可见且已启用的控件,该窗体具有焦点,但没有活动控件。这两个控件的文档都有,并提到:“如果在使用ActiveControl属性时没有控件具有焦点,或者如果所有活动窗体的控件都被隐藏或禁用,则会发生错误。”

这里有一个简单而常见的例子。创建一个带有按钮和标签的简单启动屏幕。我已经制作了这一个弹出窗口模式,但这两个设置似乎对我们的测试都不重要

接下来,创建一个
FORM\u LOAD()
事件和一个
FORM\u CURRENT()
,即使后面有以下代码:

Private Sub Form_Current()

'    Debug.Print Screen.ActiveControl.Name
'    Debug.Print Me.ActiveControl.Name

End Sub

Private Sub Form_Load()
    On Err GoTo PrintError

 '   Me.SetFocus
    Me.lbSample.Caption = "Welcome to my Application"

'    Debug.Print Form.ActiveControl.Name
'    Debug.Print Screen.ActiveControl.Name

ExitHere:
    Exit Sub
PrintError:
    Debug.Print Err.Description & " (" & Err.Number & ")"
    GoTo ExitHere
End Sub
现在,通过从LOAD()或CURRENT()事件下的
Screen.ActiveControl
form.ActiveControl
语句中删除注释标记来测试“ActiveControl”属性

即使我正在设置标签的标题,它也不会使其成为活动控件。此外,给窗体本身设置焦点或设置
form.Visible=True
都不足以激活控件:无论您尝试以何种方式通过
Screen.ActiveControl
form.ActiveControl
访问属性,您仍然会收到错误2474:

我尝试过,但无法在事件子对象本身或
FORM\u error()
事件中捕获此错误

所以这里有一个非常常见的情况——闪屏——没有活动控件。你可以通过测试一个有焦点的控件来解决这个问题,这取决于你想要完成什么