如何在VB.NET中对CheckedListBox项进行着色?

时间:2011-05-30 20:37:53

标签: vb.net button colors checkedlistbox

我在VB.NET中创建一个使用CheckedListBox来存储项目的个人应用程序。我的表单上有三个按钮,我想用它来改变所选项目的颜色(绿色,橙色和红色。)

我已经尝试了很多方法来解决这个问题并且没有这样的运气。有人能伸出援助之手吗?

4 个答案:

答案 0 :(得分:3)

改为使用ListView。它支持复选框和选定的项目颜色。

答案 1 :(得分:1)

这里有一个非常相似的答案:

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

基本上,这种控制不会达到你想要的效果(至少没有太大的复杂性)。您需要将控件升级到ListView。

答案 2 :(得分: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

答案 3 :(得分:1)

接受使用ListView的建议。看上去并且在我的Windows 7和Vista盒子上工作得很好但是在XP上,ListView没有正确显示(项目被碾压在一起,复选框并不总是显示)。检查以确保它不是框架版本问题,并且它不是屏幕分辨率问题。结束后退到CheckedListBox实现,它没有不一致。

找到这个解决方案,为我完成了CheckedListBox场景中蓝色突出显示的删除。然而,使用它你必须以另一种方式跟踪选择(全局变量,查看选中的项目等)。

我只是在处理完“..._ SelectedIndexChanged”后清除所选项目。我在“..._ SelectedIndexChange”中做的第一件事就是测试没有选择,如果是更改则不执行任何操作。结果是当前选择的项目显示为未选中(实际上是未选中的,即没有蓝色突出显示),但CheckBox保持选中状态,表示用户的最新选择。

示例==&gt;

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