2013-12-15 6 views
0

У меня есть ListBox, полный (предопределенных) элементов с включенным multiselect, чтобы предотвратить человеческие ошибки. Я установил флажок, чтобы заблокировать Listbox, чтобы он не мог выбрать какой-либо элемент, пока этот флажок установлен.Включить ScrollBar ListBox, даже если ListBox отключен?

Ну, что бы я хотел сделать, это снова включить вертикальную полосу прокрутки ListBox (это панель прокрутки по умолчанию), когда список заблокирован, чтобы я мог видеть элементы, которые выбраны, если я хочу их увидеть, просто для навигации вверх/вниз в Listbox с помощью полосы прокрутки, именно это.

Возможно ли это?

Это ListBox, он имеет только вертикальную полосу прокрутки, а не по горизонтали:

enter image description here

+0

похоже, что ваш 'ListBox' поддерживает некоторые функции редактирования? если нет, то почему вы должны отключить его? чтобы пользователь не мог выбрать какой-либо элемент? ... –

+0

@King King nope, это список по умолчанию, только несколько раз я нажимаю по ошибке на элемент, который на самом деле я не буду выбирать, и я не замечаю свою ошибку до конца. И это просто причуда, что мне приходится перемещаться по элементам списка с помощью полосы прокрутки. Когда список отключен (я думаю, что это хорошая функция). извините за мой английский – ElektroStudios

+0

все еще неясно, почему вы должны отключить этот списокBox, у нас всегда может быть какая-то работа, после отключения я думаю, что нет возможности включить ** просто ** scrollBars, по крайней мере, scrollBars появление отключенного состояния трудно перевести в нормальное состояние. –

ответ

3

Если вы просто хотите, чтобы пользователю взаимодействовать с ListBox в то же время позволяют ему использовать полосы прокрутки, это должен сделать трюк. Я сделал заказ ListBox, который поддерживает некоторые функции поставить ListBox в режиме только для чтения:

public class CustomListBox : ListBox 
{ 
    public bool ReadOnly { get; set; } 
    protected override void WndProc(ref Message m) 
    { 
     //WM_LBUTTONDOWN = 0x201 
     //WM_KEYDOWN = 0x100 
     if (ReadOnly && (m.Msg == 0x201 || m.Msg == 0x100)) { 
      Focus();//do this to allow mouse wheeling 
      return; 
     } 
     base.WndProc(ref m); 
    }   
} 

Использование: Вам просто нужно установить ReadOnly свойство true в:

customListBox1.ReadOnly = true; 

Обратите внимание, что это просто предотвращает нажатие левой мыши, а также щелчок левой кнопкой мыши. Если вам нужно запретить пользователю делать больше вещей, чем такие, как предотвращение нажатия правой кнопки мыши, вы можете поймать и отфильтровать сообщение WM_RBUTTONDOWN.

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