【问题标题】:How to get the Control with the focus in a subform?如何在子窗体中获得具有焦点的控件?
【发布时间】:2019-06-17 14:30:06
【问题描述】:

当 me.myControl 获得焦点并且我尝试设置时,Ms-access VBA 会引发错误

me.myControl.visible=false 

所以我使用 Screen.ActiveControl 来判断 myControl 是否有焦点:

if me.myControl.name = Screen.ActiveControl.name then
    me.otherControl.SetFocus
end if
me.myControl.visible=false 

不幸的是,似乎每个子表单都可以有自己的“ActiveControl”。我没有找到一种方法来确定它是哪一个。所以我必须做这个解决方法:

on error goto setMyfocus
me.subform.Form!myCtrlInSubform.visible = false
exit function

setMyfocus:
me.subform.Form!otherCtrlInSubform.SetFocus
me.subform.Form!myCtrlInSubform.visible = false
exit function

显然这不是一个好的解决方案。那么有没有办法在不引发错误的情况下确定子表单中的哪个控件具有焦点?

【问题讨论】:

  • 为什么说on error不好?这类似于 try...catch。您预计会发生错误,然后您会考虑可能导致错误的不同场景。在 ms 访问中可能看起来很脏,但您正在处理发生的异常。

标签: vba forms ms-access focus


【解决方案1】:

试试看:

' It's my main form:
If Screen.ActiveForm.Name = "YourFormName" Then
  ' And it's my subform:
  If Forms!YourFormName.ActiveControl.Name = "subform" Then
    ' And it's my control in subform:
    If Screen.ActiveControl.Name = "myCtrlInSubform" Then
      Me.subform.Form!otherCtrlInSubform.SetFocus
      Me.subform.Form!myCtrlInSubform.Visible = False
    End If
  End If
End If

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2011-09-23
    • 2014-11-22
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    相关资源
    最近更新 更多