Есть ли способ ограничить количество вариантов, которые пользователь может выбрать в ListBox с включенным MultiSelect в Access 2003? Прямо сейчас у меня есть процедура, которая срабатывает в событии On Click, которое проверяет количество выбранных вариантов, и если оно превышает мой порог, отображается предупреждающая метка.
Ограничить количество вариантов в MultiSelect ListBox
Ответы (4)
Попробуйте это. Он в основном отменяет выбор последнего выбранного элемента, если он превышает предопределенный предел:
Private Sub ListBox1_Change()
Dim counter As Integer
Dim selectedCount As Integer
selectedCount = 0
For counter = 1 To ListBox1.ListCount Step 1
If ListBox1.Selected(counter - 1) = True Then 'selected method has 0 base
selectedCount = selectedCount + 1
End If
Next counter
If selectedCount >= 4 Then 'modify # here
ListBox1.Selected(ListBox1.ListIndex) = False 'listindex returns the active row you just selected
MsgBox "Limited to 4 Choices", vbInformation + vbOKOnly, "Retry:"
End If
End Sub
MsgBox
появляется несколько раз, так как ListBox1.Selected(ListBox1.ListIndex) = False
перезапускает подпрограмму при каждом вызове. Кроме того, кажется, что он не очищает должным образом каждый выбор, только последний элемент, нажатый при удерживании клавиши Shift. К сожалению, у меня нет альтернативного решения, хотя я его ищу.
- person Gaffi; 13.02.2013
Вы можете использовать событие BeforeUpdate списка, чтобы увидеть значение listbox.ItemsSelected.Count. Если это превышает ваш лимит, вы отменяете выбор (с помощью listbox.Selectec(item)=False) текущего и отменяете событие.
Here's an example :
Private Sub lstItems_BeforeUpdate(Cancel As Integer)
' Warn the user that only x items can be selected.
' ------------------------------------------------
If lstItems.ItemsSelected.Count > MAX_SELECTED_ITEM_PERMITTED Then
MsgBox "You can only select " & MAX_SELECTED_ITEM_PERMITTED & " items in this list.", vbOKOnly + vbInformation, "Error"
' Unselect previously selected item.
' ----------------------------------
lstItems.Selected(lstItems.ListIndex) = False
Cancel = True
End If
End Sub
Используя коллекцию ItemsSelected из списка? Это единственный известный мне способ ограничить количество выбранных элементов. OTOH, есть некоторые действительно извращенные люди, которые могли бы найти альтернативу, поэтому я никогда не говорю никогда.
В чем проблема с этим методом?
Я бы предположил, что гораздо более управляемым, удобным и понятным пользовательским интерфейсом для этого был бы подход с парным списком, с ADD> и кнопкой после того, как пользователь достиг предела. Вам не нужно делать ничего сложного, просто проверьте ListCount в правом списке и отключите кнопку ADD>, когда она достигнет предела.
И вы избегаете многих проблем, поскольку пользователю совершенно ясно, что он делает, по сравнению с одновременным выбором нескольких элементов в одном списке. Вы можете сделать левый список множественным выбором и просто отключить кнопку ADD>, если количество ItemsSelected превышает предел, и уведомить пользователя соответствующим образом.
SingleSelect
lol ... См. analysistabs.com/vba-code/activex-controls/listbox/p/ - person FreeSoftwareServers   schedule 02.02.2021