在ms访问中,我有一个包含2个子表单的mainform。 SubformA是一个连续的表单,带有记录标题和每个记录的透明按钮覆盖。 SubformB包含所选记录的详细信息(这是在主窗体中其他位置的tabcontrol上,模仿弹出叠加层)。
我想要发生的是:
1.单击记录子表单A显示子表单B并将其过滤到该记录
2.浏览subformA更新中的记录,以便subformB始终显示相应的记录
3.单击子窗体上的记录A再次隐藏子窗体B,如果它是当前正在显示的记录。
但是我无法弄清楚我是如何测试当前记录是否被点击的记录因为只要我点击按钮,如果它不是当前记录,则当前事件首先触发,使其成为当前记录记录,因此总是隐藏subformB。
如果subformB上的id保持不变,我尝试使用变量来检查当前事件的开始和结束。但是,当前事件当然不会在记录没有改变的情况下触发,也就是说我需要测试这个变量。
在subformA中剥离/伪代码我试图做的事情:
Sub Form_Current
If subformB.Visible Then set filter on subformB to ID = subfromA.ID
End Sub
Sub cmdButton_Click
If subformB.Visible Then
If subformB.ID = subformA.ID Then
Hide subformB
Else
'code never gets to here because the condition is always true
'do nothing - current event has already set the filter
End If
Else
Unhide subformB
Set filter to ID = subformA.ID
End If
End Sub
有人能帮助我吗?感谢。
编辑:我要问的是如何根据单击命令按钮的记录的记录ID测试当前记录ID - 但是单击按钮时的记录ID当然只是采用新的当前记录ID 。因此,它将旧的当前记录ID与新的当前记录ID进行比较,问题是如何存储旧ID但是在测试条件之前阻止它再次更新。
答案 0 :(得分:0)
设置模块级私有字段并将其值设置为值:
a)所选ID(如果是新的)。
b)如果提供相同的ID,则为零(单击按钮两次)。
Private mSelectedId as Long
Sub cmdButton_Click
If Me!ID = mSelectedId Then
mSelectedId = 0
Else
mSelectedId = Me!ID
End If
FilterSubFormB
End Sub
您可以展开它以过滤subformB:
Private Sub FilterSubFormB()
With Me.Parent.SubformB.Form
.Filter = "ID=" & mSelectedId
.FilterOn = True
End With
End Sub
答案 1 :(得分:0)
检查可能适用于您正在执行的操作的ID的替代方法是: 1.向表单添加隐藏的未绑定文本框。 2.检查发生后,使用click事件在文本框中存储ID。 3.不检查点击事件代码中的ID,而是检查文本框中保存的值。未经测试,但是这样的事情。
Sub cmdButton_Click
If subformB.Visible Then
If subformA.ID = HiddenTextBox Then
Hide subformB
Else
End If
End If
Else
Unhide subformB
Set filter to ID = subformA.ID
End If
HiddenTextBox = subformA.ID
End Sub
答案 2 :(得分:0)