2011-05-30 2 views
3

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

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

+0

Является ли это приложение Windows Forms? –

+0

CheckedListBox был реализован из ListBox с помощью пользовательской раскраски. Вы не можете легко настроить его снова, не полностью перепрограммируя его. Использование ListView - хороший совет. –

ответ

3

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

1

Существует очень похожий ответ здесь:

For each <item> in CheckedListBox. <item> returns as Object and not as Control

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

+1

Я бы предпочел использовать CheckedListBox ..: \ – Quark

1

Вы также можете использовать 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 
+0

Я бы предпочел использовать CheckedListBox – Quark

1

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

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

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

Пример ==>

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 
Смежные вопросы