问题描述
|
我正在VB.NET中制作一个使用CheckedListBox存储项目的个人应用程序。我的表单上有三个按钮,我想用这些按钮将所选项目的颜色更改为(绿色,橙色和红色)。
我已经尝试了许多解决此问题的方法,但没有运气。有人可以伸出援手吗?
解决方法
请改用ListView。它支持复选框和所选项目的颜色。
, 这里有一个非常相似的答案:
对于CheckedListBox中的每个- 。
- 返回为对象而不是控件
基本上,此控件不会执行您想要的操作(至少在没有很多复杂性的情况下)。您需要将控件升级到ListView。
, 您还可以使用外观和行为类似于选中列表框的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
, 接受了使用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