首页 > 解决方案 > MSAccess - 清除多选列表框,移动到顶行,未选中

问题描述

我在表单上有一组多选列表框,过滤子表单上的记录。在我的实现中,我在每个列表的顶部都有一个 Null 记录来表示“全选”。它按需要工作。

我在列表框集合旁边有一个“清除过滤器”按钮,用于取消选择所有列表框中的任何选定选项。也有效,除了这种方法让我在每个列表的底部。

我的偏好是回到每个列表框的顶部(到 Null 行),而不实际选择该行。在取消选择循环之后添加 3 行可以让我到达需要的位置,但感觉很笨拙。

有没有更好的方法来达到同样的结果?

Private Sub btnClear_Click()

Dim i As Integer

    'Step thru the listbox options and de-select

    For i = 0 To Me!lstState.ListCount
        Me!lstState.Selected(i) = False
    Next i

    Me!lstState.SetFocus
    Me!lstState.ListIndex = 0
    Me!lstState.Value = ""

    '...5 more list boxes not shown here

    Forms!MainForm!Accounts_subform.Form.FilterOn = False

End Sub

标签: ms-accessvba

解决方案


您正在向前迭代,因此您最终处于底部是合乎逻辑的。

向后迭代以在顶部结束(并确保选择第一个项目以确保您最终在最顶部的项目):

Dim i As Long 'Selected expects a long, avoid casting for each property call
With Me!lstState
    .Selected(0) = True
    For i = .ListCount To 0 Step -1
        .Selected(i) = False
    Next i
End With

推荐阅读