Access 2010 组合框事件根本不触发
Access 2010 combobox events do not trigger at all
在 Access 2010 中,我正在努力让组合框强制用户在数据输入表单上输入内容。在这种情况下,我希望组合框检测到用户根本没有进行任何选择。
我已将包含的代码放入 cbo_Event1 的 OnClick、BeforeUpdate 和 OnChange 事件中。 cmb_StartOfSeason、cmb_EndOfSeason 和 cmb_MoneyRequired 是组合框,它们会在搜索表单上为用户提供有关 cbo_Event1 的详细信息。所有四个组合框都链接到其他表以查找值。
我制作了组合框的绑定 (cbo_Event1) 和未绑定 (cmb_Event) 版本。我还在代码中使用了 Me.cbo_Event1.Value、Me.cbo_Event1.ListIndex 和 Me.cbo_Event1。
Private Sub cbo_Event1_AfterUpdate()
MsgBox ("Me.cbo_Event1 = " & Me.cbo_Event1 & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cbo_Event1_Change()
MsgBox ("Me.cbo_Event1 = " & Me.cbo_Event1 & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cbo_Event1_Click()
MsgBox ("Me.cbo_Event1 = " & Me.cbo_Event1 & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cmb_Event_AfterUpdate()
MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cmb_Event_BeforeUpdate(Cancel As Integer)
MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cmb_Event_Change()
MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cmb_Event_Click()
MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
我得到的结果完全相同:事件组合框在其下拉列表出现时未检测到未进行任何选择。 MsgBox 函数甚至没有触发,表明事件没有发生。我不明白为什么。
我唯一一次看到事件处理程序没有像这样触发是在编写(或粘贴)事件处理程序时实际上并没有 link 它到适当的事件 属性 而且它不是在活动中列出 属性 sheet.
如果您通过从下拉列表中选择处理程序来创建 Sub
语句,它会将其添加到 属性 sheet,或者可以手动添加。
我想您也尝试过在处理程序的第一条语句上设置断点。如果它没有命中它,则处理程序不会 linked 到控件。
我认为您的问题与测试错误的值有关。除非您将默认值设置为 0(假设没有绑定表),否则控件中很可能永远不会有 0。而且,如果您要测试空值,还有更好的方法
LEN(TRIM(Me.cmb_Event.Vaue))>0
或
ISNULL(Me.cmb_Event.Vaue)=True
我在复制您的场景时没有遇到问题:
在 Access 2010 中,我正在努力让组合框强制用户在数据输入表单上输入内容。在这种情况下,我希望组合框检测到用户根本没有进行任何选择。
我已将包含的代码放入 cbo_Event1 的 OnClick、BeforeUpdate 和 OnChange 事件中。 cmb_StartOfSeason、cmb_EndOfSeason 和 cmb_MoneyRequired 是组合框,它们会在搜索表单上为用户提供有关 cbo_Event1 的详细信息。所有四个组合框都链接到其他表以查找值。
我制作了组合框的绑定 (cbo_Event1) 和未绑定 (cmb_Event) 版本。我还在代码中使用了 Me.cbo_Event1.Value、Me.cbo_Event1.ListIndex 和 Me.cbo_Event1。
Private Sub cbo_Event1_AfterUpdate()
MsgBox ("Me.cbo_Event1 = " & Me.cbo_Event1 & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cbo_Event1_Change()
MsgBox ("Me.cbo_Event1 = " & Me.cbo_Event1 & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cbo_Event1_Click()
MsgBox ("Me.cbo_Event1 = " & Me.cbo_Event1 & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cmb_Event_AfterUpdate()
MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cmb_Event_BeforeUpdate(Cancel As Integer)
MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cmb_Event_Change()
MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
Private Sub cmb_Event_Click()
MsgBox ("Me.cmb_Event = " & Me.cmb_Event & ".")
If Me.cmb_Event = 0 Then
Me.cmb_StartOfSeason = 0
Me.cmb_EndOfSeason = 0
Me.cmb_MoneyRequired = 0
End If
End Sub
我得到的结果完全相同:事件组合框在其下拉列表出现时未检测到未进行任何选择。 MsgBox 函数甚至没有触发,表明事件没有发生。我不明白为什么。
我唯一一次看到事件处理程序没有像这样触发是在编写(或粘贴)事件处理程序时实际上并没有 link 它到适当的事件 属性 而且它不是在活动中列出 属性 sheet.
如果您通过从下拉列表中选择处理程序来创建 Sub
语句,它会将其添加到 属性 sheet,或者可以手动添加。
我想您也尝试过在处理程序的第一条语句上设置断点。如果它没有命中它,则处理程序不会 linked 到控件。
我认为您的问题与测试错误的值有关。除非您将默认值设置为 0(假设没有绑定表),否则控件中很可能永远不会有 0。而且,如果您要测试空值,还有更好的方法
LEN(TRIM(Me.cmb_Event.Vaue))>0
或
ISNULL(Me.cmb_Event.Vaue)=True
我在复制您的场景时没有遇到问题: