我在VB.NET中创建一个使用CheckedListBox来存储项目的个人应用程序。我的表单上有三个按钮,我想用它来改变所选项目的颜色(绿色,橙色和红色。)
我已经尝试了很多方法来解决这个问题并且没有这样的运气。有人能伸出援助之手吗?
答案 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