Вопрос по c#, winforms – Как разрешить пользователю выполнять многократную проверку с помощью CheckedListBox с помощью клавиши «Shift»?

10

Допустим, у меня есть CheckedListBox с элементами «1», «2», «3», «4» и «5» в этом порядке, и я хочу выбрать «2», «3» и «4», выбрав «2», затем удерживая Shift и выбирая «4». Есть ли встроенный способ добиться этого с помощью элемента управления CheckedListBox? Я нашел статью о том, как использовать событие SelectedIndexChanged, чтобы приблизиться к этому поведению, но, хотя он проверяет несколько элементов, он не показывает их как выбранные.

http://www.windowsdevelop.com/windows-forms-general/multiple-selection-checkbox-53049.shtml

Если бы был альтернативный элемент управления, который я мог бы использовать, я был бы за это.

Ваш Ответ

7   ответов
2

CheckedListBox контроль (см.MSDN). Он поддерживает установку нескольких флажков, но не одновременное выделение (выделение) нескольких элементов.

Я согласен с другим ответом, чтоListView Вероятно, это лучший способ получить как флажки, так и множественный выбор.

:) Всего за несколько секунд до меня .... Gorgen
:) ты не ненавидишь это? WildCrustacean
20

ListView, задаватьCheckBoxes вtrue, HeaderStyle вNone, а такжеView вList.

Исправление:

Должен был быть установленView вDetails.

В моем реальном сценарии у меня есть большой список имен файлов, которые будут данными. Если я использую ListView, как мне установить его только для вертикальной прокрутки и иметь только один столбец элементов? skeletank
Отличное решение! Сначала, когда я перешелView вDetails, ListView остался пустым, но как только я добавил столбец вColumns собственность работала нормально Couitchy
Теперь, когда я думаю об этом больше, ListBox, вероятно, то, что мне нужно. Там нет причин, чтобы иметь флажки. Им просто нужно выбрать несколько файлов из списка. Спасибо за помощь, хотя. Ваш ответ будет работать для тестового сценария из моего исходного вопроса. skeletank
Извините моя ошибка. Вы хотите установитьView вDetails, Предполагая только один столбец, вы также можете установить ширину столбца, чтобы обеспечить вертикальную полосу прокрутки, получая ширину полосы прокрутки, используяSystem.Windows.Forms.SystemInformation.VerticalScrollBarWidth. Jeff Ogata
4

для мультхеков я придумал это сегодня:

    List<int> listBox2_selectionhistory = new List<int>();

    private void checkedListBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        int actualcount = listBox2_selectionhistory.Count;
        if (actualcount == 1)
        {
            if (Control.ModifierKeys == Keys.Shift)
            {
                int lastindex = listBox2_selectionhistory[0];
                int currentindex = checkedListBox2.SelectedIndex;
                int upper = Math.Max(lastindex, currentindex) ;
                int lower = Math.Min(lastindex, currentindex);
                for (int i = lower; i < upper; i++)
                {
                    checkedListBox2.SetItemCheckState(i, CheckState.Checked);
                }
            }
            listBox2_selectionhistory.Clear();
            listBox2_selectionhistory.Add(checkedListBox2.SelectedIndex);
        }
        else
        {
            listBox2_selectionhistory.Clear();
            listBox2_selectionhistory.Add(checkedListBox2.SelectedIndex);
        }
    }

Насколько я знаю, SelectionMode для checklistboxes может быть только один или ни одного, что означает, что вы никогда не сможете сделать так, чтобы приложение выбирало более 1 за раз (я также использовал это поведение, чтобы упростить мой код для checklistboxes)

11

но я попал сюда с помощью поиска, чтобы найти CheckedItems.

Выбранные элементы относятся к отмеченным элементам, отмеченные элементы относятся к проверенным элементам.

Следовательно, используйте.CheckedItems свойство вместо .SelectedItems, если вы хотите элементы с установленным флажком.

2

Свойство CheckedListBox.SelectionMode

Для более легкой альтернативы следуйте советам по течению.

-1

ВыбратьCheckOnClick = правда.

Если вы хотите получить выбранный элемент, используйтеGetItemChecked(int index) метод вместо

1

 
 string mySentLst = string.Join(";", LBO1.CheckedItems.Cast<string>());
Этот вопрос 7 лет назад касался «выбора» нескольких предметов. LarsTech
Это очевидно. Ни один из ответов не является полным, хотя. Несколько выбранных CheckedItems бесполезны, если вы не приведете их к типу Cast (ed) !! Надеюсь, это будет полезно. Jenna Leaf

Похожие вопросы