2011-05-30 5 views
3

私はアイテムを格納するためにCheckedListBoxを使用するVB.NETで個人用アプリケーションを作成しています。選択したアイテムの色を(緑色、オレンジ色、赤色に)変更する3つのボタンがフォーム上にあります。VB.NETでCheckedListBoxアイテムに色を付けるにはどうすればよいですか?

この問題には数多くのアプローチを試みましたが、そのような運がありませんでした。誰かが救いの手を貸してもらえますか?

+0

これは、Windowsフォームアプリケーションですか? –

+0

CheckedListBoxはカスタム描画を使用してListBoxから実装されました。完全に再実装することなく、簡単にカスタマイズすることはできません。 ListViewを使うのは良いアドバイスです。 –

答えて

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

1

は、リストビューを使用してのアドバイスを取りました。私のWindows 7とVistaの箱で見栄えが良くなったが、XPでは、ListViewが正しく表示されなかった(項目が互いに重なり合っていて、チェックボックスが常に表示されない)。それがフレームワークのバージョンの問題ではなく、画面解像度の問題ではないことを確認しました。矛盾していないCheckedListBox実装に戻りました。

CheckedListBoxシナリオの青いハイライトの削除を達成したこのソリューションが見つかりました。しかし、それを使うと、別の方法(グローバル変数、チェックされた項目を見るなど)で選択を追跡する必要があります。

"... SelectedIndexChanged"を処理した後、選択した項目をクリアするだけです。 "... SelectedIndexChange"で最初に行うことは、選択がないかどうかをテストし、それが変更の場合は何もしません。その結果、現在選択されている項目が選択されていない(実際には選択されていない、つまり青色のハイライトは表示されていない)が、チェックボックスはチェックされたままであり、

例==>

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 
関連する問題