具有可见控件的表单可以没有具有焦点的控件吗?

问题描述 投票:0回答:2

我有一些使用ActiveControl属性的Access VBA代码。如果碰巧没有焦点控制,那将引发错误。如果总是有[[could具有焦点的可见控件,我是否需要担心?也就是说,在总是有控件可以具有焦点的形式中,无控件有什么方法可以具有焦点吗?

我看到其他有关某些相关问题的文章。它们似乎表明,唯一的方法(如果我想使用VBA来防止任何控件具有焦点)将焦点设置为某些物理上隐藏的(但visible = True)控件。这意味着没有控制无法集中注意力。但是我想明确地问这个问题。
ms-access access-vba
2个回答
0
投票
否。如果表单具有可见且启用的控件(!),则如果表单具有焦点,则其中的一个将始终具有焦点。

但是,如果没有控件(因为3年后,某人决定存在必须禁用所有控件的情况)或意外控件(即某人,则应该练习防御性编程,不要让代码崩溃。稍后添加)是活动的。


1
投票
您绝对可以有一个带有可见和启用控件的活动表单,该控件具有焦点,但没有活动控件。 form.ActiveControlscreen.ActiveControl的文档都提到了它:

“如果使用ActiveControl属性时没有控件具有焦点,或者隐藏或禁用了所有活动窗体的控件,则会发生错误。”

这是一个简单且常见的情况。创建一个带有按钮和标签的简单启动画面。我已经将它设置为

Pop Up和Modal,但是对于我们的测试来说,这两个设置似乎都不重要。

Sample Form

下一步,即使后面有以下代码,也要创建一个FORM_LOAD()事件和一个FORM_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.ActiveControlform.ActiveControl语句中删除注释标记来测试“ ActiveControl”属性。 

即使我设置了标签的标题,也没有使其成为活动控件。同样,给窗体本身以焦点或设置Form.Visible = True都不足以激活控件:无论您尝试通过Screen.ActiveControlForm.ActiveControl哪种方式访问​​属性,您仍然会收到错误2474:

Error 2474

我尝试过,但是无法在事件子程序本身或FORM_ERROR()事件中捕获此错误。

因此,这是一个非常常见的情况-启动画面-此处没有活动控件。您也许可以通过测试具有焦点的控件来解决它,这取决于您要完成的工作。

© www.soinside.com 2019 - 2024. All rights reserved.