Страницы: 1
RSS
ListBox. Заблокировать возможность выбора, но оставить возможность прокрутки.
 
Всем привет!

Имеется пользовательская форма, на которой расположен ListBox, с несколькими колонками, в момент, когда форма показывается пользователю, в листбоксе уже выбрано несколько позиций. Требуется заблокировать возможность выбирать позиции в листбоксе, но при этом оставить возможность прокрутки. У меня было два варианта решения задачи:
1. Добавить элемент label, сделать его прозрачным, удалить заголовок и "натянуть" поверх листбокса. Вариант отпал потому, как оказалось что листбокс всегда находится поверх других элементов управления.
2. Перехватывать действия пользователя в листбоксе. И вот тут чё-то не пошло... Пробовал после действия пользователя восстанавливать исходное состояние листбокса в событии Change, но происходит рекурсивный вызов.

Кто-нибудь может помочь? Заранее благодарен!
 
Какой смысл? Для чего ListBox? Почему не вывести те значения. которые выделены, в отдельный список?

Не посещала мысль, что при наличии файла-примера легче помогать?
 
Свойство Locked в True поставить не пробовали?
Хотя нет, прокрутка-то нужна...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
vikttur, я правильно вас понял, что вам неизвестен способ заблокировать возможность выбора, но оставить возможность прокрутки у листбокса?
 
Цитата
Aleksey написал:
происходит рекурсивный вызов
Можно обойти таким костылём -
Код
Dim b_Skip_ListBox1_Change As Boolean

Private Sub ListBox1_Change()
If b_Skip_ListBox1_Change Then Exit Sub
b_Skip_ListBox1_Change = True
'здесь восстанавливаем исходное состояние листбокса
b_Skip_ListBox1_Change = False
End Sub
Изменено: Апострофф - 12.02.2016 14:15:32
 
Вообще пока мыслей в голову не приходит, кроме как создать дубль листбокса(скрытый) и при необходимости просто из него переписывать нужные значения и свойства.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
вам неизвестен способ заблокировать...
Мне неизвестен способ такой блокировки, но Вы меня неправильно поняли :)
Я спрашивал о ЦЕЛИ. Зная цель, можно предлагать другие варианты.
 
А вариант с контролом-дубликатом не рассматривается?
 
Цитата
Юрий М написал: А вариант с контролом-дубликатом не рассматривается?
Это то что предлагает The_Prist?
Рассматриваются любые варианты! Я обязательно попробую всё что уже предложили или еще предложат.

Цитата
vikttur написал: Я спрашивал о ЦЕЛИ
Хорошо, я сформулирую цель подробнее, чуть позже.
 
Цитата
Aleksey написал: Это то что предлагает The_Prist?
Не совсем ) Выводить УЖЕ отобранные при инициализации значения в видимый контрол (Label, TextBox, второй ListBox, который заблокировать), а основной ListBox пусть пользователь крутит, как хочет )
 
Теперь понял. Видимо меня смутило словосочетание "контрол-дубликат". Но мне кажется что это решение нарушает принцип WYSIWYG, получается что бы не выбрал пользователь в основном листбоксе на конечный результат это никак не повлияет.
 
Цитата
Aleksey написал: что бы не выбрал пользователь в основном листбоксе на конечный результат это никак не повлияет
А разве Вы не этого добивались?
Цитата
Aleksey написал: Требуется заблокировать возможность выбирать позиции
 
Юрий М, этого. Пользователь ничего не может выбрать, он может только посмотреть, что уже выбрано. А в вашем решении получается, что в основном листбоксе он может выбрать что ему заблагорассудится. Проще тогда в листбоксе добавить еще одну колонку, где вместо галочки писать условно "ОК".
 
Цитата
Aleksey написал: в основном листбоксе он может выбрать что ему заблагорассудится
Да и пусть выбирает - не отслеживайте его выбор, вот и всё )) Главное, что он может покрутить )
 
Юрий М, разумеется я понимаю что можно не отслеживать действия пользователя в листбоксе). Но на мой взгляд, игнорировать вполне правомерные действия пользователя - это неправильно в своей сути.
 
Ну тогда запоминайте нужный выбор и при попытке пользователя поменять его, выводите сообщение и восстанавливайте выбор нужных позиций. (#6)
По поводу
Цитата
игнорировать вполне правомерные действия пользователя - это неправильно в своей сути.
А запрещать - правильно? ))
Есть ещё вариант: полный список отображать в TextBox с прокруткой, а ListBox (или другой контрол, где показаны ТОЛЬКО нужные позиции) - блокировать.  
 
Если не гнушаетесь использовать доп.контрол - можно как во вложении сделать.

Цитата
Юрий М написал:
А запрещать - правильно? ))
Вообще, Юр, иногда просто необходимо. Не всегда пользователь должен иметь возможность изменять - иногда просто смотреть :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх