Как отключить CheckedListBox, но включить прокрутку winforms - PullRequest
3 голосов
/ 22 марта 2012

Я знаю, что вопрос может показаться легким, но я не могу найти решение. У меня есть CheckdListBox в моей форме. У меня есть список флажков внутри. Если я сделаю это: clbxMyControl.Enabled = false;, я не смогу прокрутить все элементы. Как разрешить прокрутку на отключенном CheckedListBox?

Спасибо! * * 1004

Ответы [ 4 ]

13 голосов
/ 22 марта 2012

Вместо отключения элемента управления вы должны изменить его SelectionMode следующим образом:

checkedListBox1.SelectionMode = SelectionMode.None;

Пользователь не сможет выбрать элемент, но будет иметь возможность прокручивать

3 голосов
/ 22 марта 2012

Вы можете запретить пользователю проверять элементы с помощью события ItemCheck:

    bool listEnabled = true;

    private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) {
        if (!listEnabled) e.NewValue = e.CurrentValue;
    }

Но убедитесь, что очевидно, что проверка больше не работает:

    private void setListEnabled(bool enabled) {
        listEnabled = enabled;
        if (listEnabled) checkedListBox1.BackColor = Color.FromKnownColor(KnownColor.Window);
        else checkedListBox1.BackColor = Color.FromKnownColor(KnownColor.Control);
    }
1 голос
/ 22 марта 2012

ListBox имеет только один дескриптор в Windows API, который включен или отключен. Поэтому нет собственного способа включить прокрутку, кроме пунктов.

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

Или вы не можете использовать свойство enabled, но измените цвет фона / шрифта, чтобы он выглядел отключенным, и установите:

checkedListBox1.SelectionMode = SelectionMode.None;

Другой альтернативой может быть DataGridView. Он гораздо более мощный, я не уверен, что он также отключает полосу прокрутки, но если это так, вы можете сделать ячейки доступными только для чтения и раскрасить их.

1 голос
/ 22 марта 2012

Этот код можно использовать для прокрутки CheckedListBox.

clbxMyControl.SelectionMode = SelectionMode.None;

Потому что Enable = false; сделать управление неуправляемым, потому что это делает контейнер флажка отключенным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...