Для каждого <item>в CheckedListBox.<item> возвращается как объект, а не как элемент управления - PullRequest
9 голосов
/ 24 марта 2010

У меня есть ранее заполненный CheckedListBox. Я хочу выполнить цикл «для каждого / следующего» по всем элементам в CheckedListBox и сделать много «вещей» с каждым элементом итерации checklistbox.

пример кода:

    For Each item In CheckedListBox1.Items

        If item.Checked = True Then

            'do stuff like
            item.BackColor = Color.Blue

        Else

            'do other stuff
            item.BackColor = Color.Brown

        End If

    Next

проблема в том, что это тип 'Object', а не тип 'Control'. Если я использую итерацию var As CheckBox, она генерирует исключение InvalidCastException, в котором говорится, что тип «System.String» нельзя связать с типом «System.Windows.Forms.CheckBox»

Я знаю, что могу легко обойти это, но я хочу использовать a для каждого / следующего цикла, так как у меня много кода в этом цикле (и With не может быть использован), и всегда соединение с объектом напрямую Я хочу избежать, и мне действительно нужно, чтобы код был максимально простым.

Я действительно потратил один день на поиски этого, но не смог найти никакого ответа.

Ответы [ 2 ]

8 голосов
/ 24 марта 2010

A CheckedListBox не является набором CheckBox элементов управления.
У него нет коллекции объектов-оболочек.

Элемент управления CheckedListBox - это простой элемент управления, который может отображать только простой список элементов; Похоже, вы ищете что-то более мощное. (Например, невозможно изменить цвет фона отдельного элемента без рисунка владельца)

Вместо этого следует использовать ListView (со свойством CheckBoxes, установленным в значение true).
Затем вы можете просмотреть экземпляры ListViewItem в коллекции Items.

1 голос
/ 17 апреля 2016
For Each item In SuppliersCheckList.CheckedItems
        If SuppliersCheckList.GetItemCheckState(SuppliersCheckList.Items.IndexOf(item)) Then
            MsgBox(item.ToString)
        End If
Next
...