【问题标题】:How do I color CheckedListBox items in VB.NET?如何在 VB.NET 中为 CheckedListBox 项目着色?
【发布时间】:2011-09-05 01:15:20
【问题描述】:

我正在 VB.NET 中制作一个使用 CheckedListBox 来存储项目的个人应用程序。我的表单上有三个按钮,我想用它们将所选项目的颜色更改为(绿色、橙色和红色)。

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

【问题讨论】:

  • CheckedListBox 是通过使用自定义绘画从 ListBox 实现的。如果不完全重新实现它,您将无法轻松地再次自定义它。使用 ListView 是个好建议。

标签: vb.net button colors checkedlistbox


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    基本上,这个控件不会做你想做的事(至少不是很复杂)。您需要将控件升级为 ListView。

    【讨论】:

    • 我真的宁愿使用 CheckedListBox.. :\
    【解决方案3】:

    您还可以使用外观和行为类似于选中列表框的 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
    

    【讨论】:

    • 我真的宁愿使用 CheckedListBox
    【解决方案4】:

    接受了使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      相关资源
      最近更新 更多