我在表单上有多个选择列表框的集合,用于过滤子表单上的记录。在我的实现中,我在每个列表的顶部都有一个Null记录,以表示“全选”。它正在按要求工作。
我在列表框集合旁边有一个“清除过滤器”按钮,以取消选择所有列表框中的任何选定选项。除此方法外,其他方法也可以解决每个列表的底部问题。
我的偏好是返回到每个列表框的TOP(移至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
答案 0 :(得分:1)
您正在向前迭代,因此最终到达底部是合乎逻辑的。
向后迭代以结束于顶部(并确保选择了第一项以确保结束于最顶部):
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