我正在开发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表单有太多的控件要以这种方式编码。
感谢。
答案 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属性可能很难掌握。
祝你好运!