You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS Access单选择ListBox点击事件无法识别选中项求助

Access列表框单击事件无法识别选中项的问题

问题场景

我有一个未绑定窗体,包含:

  • 组合框cmbVariety
  • 两个列表框lstItems、lstProductionYears

逻辑流程:

  1. 选择cmbVariety时,设置lstItems的行源查询
  2. 选中lstItems中的项时,基于该选择设置lstProductionYears的行源

注意:lstItems的多选模式必须设为无,不允许用户选择多行。

我尝试了两段代码,但都无法识别选中项。双击事件可以正常工作,但已被用于其他功能,因此只能使用单击事件。

尝试的代码

代码1:遍历列表项判断选中状态

Private Sub lstItems_Click()
Dim i As Integer

With lstItems
    For i = 0 To .ListCount - 1
        If .selected(i) Then
            YearsTable .Column(0, i) '根据选中项设置lstProductionYears行源的子程序
        End If
    Next i
End With

Me.lstProductionYears.Requery
End Sub

代码2:遍历ItemsSelected集合

Private Sub lstItems_Click()
Dim sel As Variant

With lstItems
    Debug.Print .ItemsSelected.count '点击行后输出始终为0
    For Each sel In .ItemsSelected 
        YearsTable .Column(0, sel) '根据选中项设置lstProductionYears行源的子程序
    Next sel
End With

End Sub

问题原因与解决方案

当列表框的**多选模式为“无”**时,Click事件触发时,选中状态还未完成更新,所以Selected(i)和ItemsSelected都无法正确获取当前选中项。

方案1:使用AfterUpdate事件(推荐)

这是列表框选中项变更完成后触发的事件,更适配选中后的逻辑处理:

Private Sub lstItems_AfterUpdate()
    '直接用Value获取选中项的绑定列值(假设绑定列为第0列)
    YearsTable Me.lstItems.Value
    Me.lstProductionYears.Requery
End Sub

方案2:在Click事件中使用ListIndex属性

如果必须保留Click事件,可以通过ListIndex获取当前选中项的索引(未选中时为-1):

Private Sub lstItems_Click()
    If Me.lstItems.ListIndex <> -1 Then
        YearsTable Me.lstItems.Column(0, Me.lstItems.ListIndex)
        Me.lstProductionYears.Requery
    End If
End Sub

内容的提问来源于stack exchange,提问作者sriche01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:39:58