フォームに複数選択リストボックスのコレクションがあり、サブフォームのレコードをフィルタリングしています。私の実装では、「すべて選択」を表すために、各リストの上部に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
あなたは前方に繰り返しているので、あなたが一番下に行くのは論理的です。
逆方向に繰り返して一番上に移動します(最初のアイテムが選択されていることを確認して、一番上のアイテムに移動するようにします)。
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
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加