2009-09-10 2 views
1

Есть ли способ ограничить количество выборов, которые пользователь может выбрать в ListBox с включенным MultiSelect в Access 2003? Прямо сейчас у меня есть процедура, которая срабатывает при событии On Click, которая проверяет количество выбранных вариантов, и если она превысит мой порог, будет отображаться предупреждающая метка.Ограничить количество выборов в MultiSelect ListBox в доступе?

ответ

3

Дайте этому попытку. Это в основном отменяет последний выбранный элемент, если его в течение заранее определенного предела:

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 
+0

Спасибо. ListBox.Selected (ListBox.ListIndex) был тем, что я искал. – mandroid

+2

Фактически нет, что не отменяет выбор последнего выбранного элемента. Он выберет последний элемент в списке, хотя он может быть невидим. Также вы можете получить точный список, используя следующее, а не для проверки каждого элемента списка: Me.List11.ItemsSelected.Count –

+2

aha, я знал, что был бы быстрый способ вернуть выбранный счет! Я не следую за тем, как он возвращает последний элемент в списке ... listIndex возвращает активный номер индекса в списке, если только не выбран ни один индекс, после чего он возвращает счетчик списка. http://msdn.microsoft.com/en-us/library/aa196331(office.11).aspx – Fink

1

Использование списка товаровВыбранная коллекция? Это единственный способ ограничить количество выбранных элементов. OTOH есть некоторые действительно искривленные люди, которые могли бы найти альтернативу, поэтому я никогда не говорю никогда.

В чем проблема с этим методом?

+1

Я предполагаю, что OP хотел бы либо запретить выбор более чем N выбора или, по крайней мере, снять отмену последнего выбора, когда они отбросят свое сообщение об ошибке/предупреждении. – BIBD

3

Вы можете использовать событие BeforeUpdate для списка listbox.ItemsSelected.Count. Если это превысило ваш лимит, вы отмените выбор (с помощью listbox.Selectec (item) = False) текущего и отмените событие.

Вот пример: 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 

+0

Можете ли вы написать очень простой пример этого? – mandroid

1

Я бы предположить, что гораздо более управляемым, удобный и понятный UI для этого будет парный ListBox подход, с ADD> и кнопок после того, как пользователь достиг предела. Вам не нужно ничего делать, просто проверьте ListCount правого списка и отключите кнопку ADD>, когда он достигнет предела.

И вы избегаете многих проблем, так как пользователю совершенно ясно, что они делают по сравнению с выбором нескольких элементов одновременно в одном списке. Вы можете сделать многосегмент левого списка и просто отключить кнопку ADD>, если счетчик ItemsSelected превысит лимит и соответствующим образом сообщит об этом пользователю.

Смежные вопросы