MS Access:当焦点因任何其他控件而丢失时隐藏子表单

时间:2017-11-07 11:26:44

标签: forms ms-access lost-focus

我正在开发MS访问数据库(2016)。

我有一个主窗体(名为 MF ),它有很多控件,包括一个子窗体。此子表单名为 SF ,它与 MF 上的两个控件相关。这些控件名为 C1 C2

加载 MF 时, SF 不可见。

C1 C2 获得焦点时, SF 可见性设置为 True 。< / p>

现在我需要的是:

1-在 C1 C2 失去焦点后,将 SF 的可见性设置为 False SF 之外的其他控件。

2-将 SF 的可见性设置为 False 一旦失去对 MF 的任何控件的关注,除外C1 C2

在开始时似乎很简单,它似乎很直接,但事实并非如此。

我用过:

Private Sub C1_GotFocus()
    Me.SF.Visible = True
End Sub

Private Sub C2_GotFocus()
    Me.SF.Visible = True
End Sub

Private Sub C1_LostFocus()
    Me.SF.Visible = False
End Sub

Private Sub C2_LostFocus()
    Me.SF.Visible = False
End Sub

Private Sub SF_LostFocus()
    Me.SF.Visible = False
End Sub

现在,如果 C1 C2 失去对 SF 的控制权,它就会消失,我无法选择 C1所需的信息 C2

如果 SF 失去 C1 C2 的焦点,它会消失

使用一些 if 语句似乎很容易解决这个问题,但事实并非如此。

问题是获得焦点的新控件无法由LostFocus()事件预测。因此,很难这样做。

我在网上搜索了一个解决方案,发现我无法使用。

解决方法是省略 C1 C2 SF LostFocus()事件,并设置其他所有单一控件 MF ,专注于隐藏 SF

虽然这是我需要的,但似乎不是一个实际的解决方案。

有没有更直接和理性的方法来实现这一目标?

请记住,Main表单有太多的控件要以这种方式编码。

感谢。

1 个答案:

答案 0 :(得分:0)

我会考虑使用MF的OnCurrent事件,当设置新记录或移动到新记录时会触发该事件。我不确定C1或C2是否可编辑。如果他们不是那么它很简单。如果是,则只需确保在设置SF的可见性之前两者都有值。 MF背后的代码应该有一个函数,不受任何事件的约束,其名称类似于&#34; SetSubformVisibility&#34;。在其中,检查C1和C2的值并相应地显示/隐藏SF。如果不是那样,请确保仅设置可见性。例如:

If Me.SF.Visible = true THEN Me.SF.Visible = False

通过这种方式,您并不总是将其设置为Access,因为它将以其事件模型的工作方式闪烁。通过这种方式,如果它运行得比它应该的多,那么什么都不会发生。然后,您可以在窗体的OnFocus,OnLostFocus,OnCurrent等中调用此单个函数。根据C1和C2的可编辑性,OnCurrent可能就足够了。

您可能还想将某些逻辑移入SF,例如OnLoad。您可以引用父表单,并根据需要以编程方式更改SF RecordSource。使用子窗体控件的LinkChild / Master属性可能很难掌握。

祝你好运!