Как раскрасить элементы CheckedListBox в VB.NET? - PullRequest
3 голосов
/ 31 мая 2011

Я делаю личное приложение в VB.NET, которое использует CheckedListBox для хранения предметов. У меня есть три кнопки на форме, с помощью которых я хотел бы изменить цвет выбранного элемента с помощью (на зеленый, оранжевый и красный.)

Я перепробовал множество подходов к этому вопросу, и мне не повезло. Может ли кто-нибудь протянуть руку помощи?

Ответы [ 4 ]

3 голосов
/ 31 мая 2011

Вместо этого используйте ListView. Имеет поддержку флажков и выбранных цветов элементов.

1 голос
/ 14 июля 2011

Принял совет об использовании ListView. Выглядело и прекрасно работало на моих компьютерах с Windows 7 и Vista, но в XP ListView не отображался должным образом (элементы пересекались друг с другом, флажки не всегда отображались). Проверено, чтобы убедиться, что это не проблема версии фреймворка и не проблема разрешения экрана. Закончилось отступлением к реализации CheckedListBox, в которой НЕ было несоответствия.

Нашел это решение, которое завершило удаление синего выделения в сценарии CheckedListBox для меня. Однако, используя его, вы должны отслеживать выборку другим способом (глобальная переменная, просмотр отмеченных элементов и т. Д.).

Я просто очищаю выбранные элементы после обработки «..._ SelectedIndexChanged». Первое, что я делаю в "..._ SelectedIndexChange", это тест на отсутствие выбора и ничего не делаю, если это изменение. В результате текущий выбранный элемент отображается невыбранным (и фактически не выбранным, т. Е. Не выделяется синим цветом), однако флажок остается отмеченным, указывая самый последний выбор для пользователя.

Пример ==>

Private Sub ModelCheckedListBox_SelectedIndexChanged(ByVal sender As System.Object,...
    Dim x As Short = ModelCheckedListBox.SelectedIndex
    If x >= 0 Then

  'Something I always do since the Selection Mode = "One" doesn't bother to clear
        'the checks itself

        ModelCheckedListBox.SetItemChecked(x, True)
        If ModelCheckedListBox.CheckedItems.Count > 1 Then
            For Each item In ModelCheckedListBox.CheckedIndices
                If item <> x Then
                    ModelCheckedListBox.SetItemChecked(item, False)
                End If
            Next
        End If
        ModelCheckedListBox.Refresh()

  'More of your code

        ModelCheckedListBox.ClearSelected()
    End If
End Sub
1 голос
/ 31 мая 2011

Вы также можете использовать TreeView, который выглядит и действует как проверенный список:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Me.TreeView1.ShowLines = False

Me.TreeView1.CheckBoxes = True

Dim MyColors() As Color = {Color.Black, Color.Blue, Color.Red, Color.Green, Color.Aqua}

For x As Integer = 0 To 4

Dim NewNode As TreeNode = Me.TreeView1.Nodes.Add("Node" & x)

NewNode.ForeColor = MyColors(x)

Next

End Sub
1 голос
/ 31 мая 2011

Здесь очень похожий ответ:

Для каждого в CheckedListBox. возвращается как объект, а не как элемент управления

По сути, этот элемент управления не будет делать то, что вы хотите (по крайней мере, не без особой сложности). Вам необходимо обновить свой элемент управления до ListView.

...