私はアイテムを格納するためにCheckedListBoxを使用するVB.NETで個人用アプリケーションを作成しています。選択したアイテムの色を(緑色、オレンジ色、赤色に)変更する3つのボタンがフォーム上にあります。VB.NETでCheckedListBoxアイテムに色を付けるにはどうすればよいですか?
この問題には数多くのアプローチを試みましたが、そのような運がありませんでした。誰かが救いの手を貸してもらえますか?
私はアイテムを格納するためにCheckedListBoxを使用するVB.NETで個人用アプリケーションを作成しています。選択したアイテムの色を(緑色、オレンジ色、赤色に)変更する3つのボタンがフォーム上にあります。VB.NETでCheckedListBoxアイテムに色を付けるにはどうすればよいですか?
この問題には数多くのアプローチを試みましたが、そのような運がありませんでした。誰かが救いの手を貸してもらえますか?
代わりにListViewを使用してください。チェックボックスと選択したアイテムの色をサポートしています。
非常によく似た答えがここにあります:
For each <item> in CheckedListBox. <item> returns as Object and not as Control
基本的には、このコントロールは、あなたが(少なくともあまり複雑なし)にそれをやりたいではないでしょう。コントロールをListViewにアップグレードする必要があります。
私は本当にむしろCheckedListBoxを使用します。:\ – Quark
また見えてチェックリストボックスのような役割を果たし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 – Quark
は、リストビューを使用してのアドバイスを取りました。私の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
これは、Windowsフォームアプリケーションですか? –
CheckedListBoxはカスタム描画を使用してListBoxから実装されました。完全に再実装することなく、簡単にカスタマイズすることはできません。 ListViewを使うのは良いアドバイスです。 –