2011-05-30 127 views
3

我正在VB.NET中使用CheckedListBox來存儲項目的個人應用程序。我有三個按鈕在我的窗體上,我想要更改所選項目的顏色(綠色,橙色和紅色)。如何爲VB.NET中的CheckedListBox項目着色?

我已經嘗試了很多方法來解決這個問題,並沒有這樣的運氣。有人能伸出援助之手嗎?

+0

這是一個Windows窗體應用程序? – 2011-05-30 20:43:14

+0

CheckedListBox是通過使用自定義繪畫從ListBox實現的。如果不完全重新實施它,您將無法再輕鬆地對其進行自定義。使用ListView是很好的建議。 – 2011-05-30 21:18:32

回答

3

改爲使用ListView。它支持複選框和選定的項目顏色。

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 2011-05-30 21:49:51

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 
相關問題