3 / 3 / 2
Регистрация: 21.05.2015
Сообщений: 47
|
|
1 | |
Ограничение выбора в ListBox при множественном выборе07.08.2015, 14:00. Показов 2261. Ответов 11
Метки нет Все метки)
(
Друзья! Подскажите пожалуйста, как ограничить выбор до трёх включительно элементов, в ListBox при множественном выборе. Например в ListBox находится 12 элементов, но возможность выбора нужно чтобы была только трёх элементов из всех.
0
|
|
07.08.2015, 14:00 | |
Ответы с готовыми решениями:
11
Осуществить возможность добавления, редактирования и удаления элементов данных списков при единичном и множественном выборе Возможно ли при выборе через opendialog заносить в ListBox имена файлов, а при чтении из ListBox получать путь к файлам?
Как можно сделать так чтобы при выборе из LIstBox организацию в другом LIstBox-е отоброжались бы отделы этои организации? |
Модератор
![]() 3871 / 3194 / 479
Регистрация: 27.01.2014
Сообщений: 5,820
|
|
07.08.2015, 16:19 | 2 |
ставь счетчик количества ListBox1.SelectedItems.Count. если рано 3-м, то при следующем клике будет происходить следующее выделение, а ты его снимай...
0
|
3 / 3 / 2
Регистрация: 21.05.2015
Сообщений: 47
|
|
07.08.2015, 16:44 [ТС] | 3 |
Так я и сделал:
If ListBox1.SelectedItems.Count > 3 And Me.ListBox1.GetSelected(Me.ListBox1.SelectedIndex) = True Then Me.ListBox1.SetSelected(Me.ListBox1.SelectedIndex, False) Только эта конструкция слегка глючная. Когда три элемента уже выделены, если кликнуть ниже, то верхний элемент снимется, а нижний, который кликнул установится. И наоборот, если кликнуть выше трёх, то всё работает правильно. А вот как сделать, чтобы оно правильно работало, я что-то недотукаю.
0
|
Модератор
![]() 3871 / 3194 / 479
Регистрация: 27.01.2014
Сообщений: 5,820
|
|||||||||||
07.08.2015, 17:23 | 4 | ||||||||||
Vanguger, а так?
![]()
а что слудует за этим куском кода в методе? чтото есть? Добавлено через 2 минуты или вот так
0
|
3 / 3 / 2
Регистрация: 21.05.2015
Сообщений: 47
|
||||||
07.08.2015, 17:36 [ТС] | 5 | |||||
Yury Komar, первый вариант точно также как и мой вариант работает. Если кликать ниже, то перескакивает. Второй выдаёт ошибку при клике на четвёртом элементе - Общий член "SelectionClear" для типа "String" не найден.
Вот весь кусок моего кода:
0
|
Модератор
![]() 3871 / 3194 / 479
Регистрация: 27.01.2014
Сообщений: 5,820
|
|
07.08.2015, 19:21 | 6 |
Vanguger, добрался до компа,щас тебе будет готовое решение
![]() В двух словах скажу, будем запоминать выделенные позиции и записывать их в свойство TAG твоего листбокса. Затем если выделено больше чем три строки, очистим список и быстренько выделим заново прошлые три записанных. это даст возможность выделять не последовательно а в разноброс, например сначала последний пото первы затем в середине. как угодно
0
|
3 / 3 / 2
Регистрация: 21.05.2015
Сообщений: 47
|
|
07.08.2015, 19:23 [ТС] | 7 |
Ошибка сохраняется. Действительно получаем массив выделенных индексов. Есть некий FocusedIndex который содержит правильный номер выделенного элемента. Но как его получить не знаю, напрямую не получается ListBox1.FocusedIndex не работает. Yury Komar, не могли бы Вы показать пример, как через содержимое снимать выделения.
0
|
Модератор
![]() 3871 / 3194 / 479
Регистрация: 27.01.2014
Сообщений: 5,820
|
||||||
07.08.2015, 19:36 | 8 | |||||
![]() Решение
Vanguger, focusedibdex это у ListViee. два разных контролла.
Добавлено через 1 минуту Vanguger, держи готовый код:
Vanguger, а искать индекс по содержимому не всегда корректно, так как в списке может оказаться два пункта абсолютно одинаковых и тогда могут быть ошибки и при поиске нужного нам всегда будет выдавать индекс первого или последнего найденного, в зависимости от условия.
3
|
3 / 3 / 2
Регистрация: 21.05.2015
Сообщений: 47
|
|
07.08.2015, 19:38 [ТС] | 9 |
Yury Komar, спасибулище огромное! Вот это работает!
Интересная идея через .tag сказано мастер, а я тут втыкаю пол дня ![]()
0
|
Модератор
![]() 3871 / 3194 / 479
Регистрация: 27.01.2014
Сообщений: 5,820
|
|
07.08.2015, 19:48 | 10 |
Vanguger, ну вместо TAG можно и массив и что угодно. просто чтоб избежать дополнительных переменных у него есть своя... можешь этот код сдеть универсальным заменив слова Listbox1 на SENDER и просто копировать и вставлять в любой листбок других проектов не подкорректировав только нужное количество выделений
0
|
3 / 3 / 2
Регистрация: 21.05.2015
Сообщений: 47
|
|
07.08.2015, 20:01 [ТС] | 11 |
Согласен, тут уже можно варьировать. Ещё раз БлагоДарю, для меня один рабочий пример, лучше всяких гуглов, хотя и поисковик я сегодня перелопатил. На рабочих примерах как-то легче учиться.
0
|
Модератор
![]() 3871 / 3194 / 479
Регистрация: 27.01.2014
Сообщений: 5,820
|
|
07.08.2015, 20:10 | 12 |
Vanguger, согласен. а если еще и с комментами. но теоретически тоже следует понимать что куда и зачем. это очень простой пример. можно вместо TAG напрямую с коллекцие выделенных элементов работать, да и по хорошему нужно было так, этот пример на скорую руку, но смысл тот же, коллекция дает тебе тот же список что мы записываем вручную в TAG. но тут проблема с поисков позиции последнего выбранного элемента, так как мы можем выделять ведь и не по порядку и получится что неизвестно какое выделение нам снять чтоб не ошибиться. поэтому в любом случае все выделения придеться скинуть и выделять заново из ранее записанных, но тогда и коллекция очистится... так что этот пример думаю удачно подходит учитывая все выше сказанеые факты.
0
|
07.08.2015, 20:10 | |
Помогаю со студенческими работами здесь
12
Вывод картинки при выборе listbox ListBox - событие при выборе элемента Выдает ошибку после выбора при выборе 7 параметра ListBox и его погрешность при выборе itemControl Показать кнопку при выборе записи в ListBox-е Смена события при выборе значения в ListBox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |