MS Access单选择ListBox点击事件无法识别选中项求助
Access列表框单击事件无法识别选中项的问题
问题场景
我有一个未绑定窗体,包含:
- 组合框
cmbVariety - 两个列表框
lstItems、lstProductionYears
逻辑流程:
- 选择
cmbVariety时,设置lstItems的行源查询 - 选中
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
相关产品推荐
相关产品推荐

