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 

我在复制您的场景时没有遇到问题: