Как разрешить пользователю выполнять многократную проверку с помощью CheckedListBox с помощью клавиши «shift»? - PullRequest
10 голосов
/ 30 сентября 2010

Скажите, что у меня есть 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 ]

22 голосов
/ 30 сентября 2010

Возможно, существует более простая альтернатива, но вы можете использовать ListView, установить CheckBoxes на true, HeaderStyle на None и View на List.

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

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

12 голосов
/ 23 февраля 2013

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

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

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

4 голосов
/ 08 февраля 2012

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

    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)

2 голосов
/ 30 сентября 2010

Похоже, что это невозможно установить, см. Раздел примечаний в CheckedListBox.SelectionMode Свойство

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

2 голосов
/ 30 сентября 2010

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

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

1 голос
/ 26 августа 2017

CheckedListBox

 private System.Windows.Forms.CheckedListBox LBO1;

 string mySentLst = string.Join(";", LBO1.CheckedItems.Cast<string>());
0 голосов
/ 29 марта 2016

Пожалуйста, выполните следующие действия:

  • Выберите CheckOnClick = true.

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

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