CheckedListBoxを使用してアイテムを格納するVB.NETで個人用アプリケーションを作成しています。フォームに3つのボタンがあり、選択したアイテムの色を(緑、オレンジ、赤に)変更したいと思います。
私はこの問題に対して多くのアプローチを試みましたが、そのような運はありませんでした。誰かが救いの手を貸してくれませんか?
CheckedListBoxを使用してアイテムを格納するVB.NETで個人用アプリケーションを作成しています。フォームに3つのボタンがあり、選択したアイテムの色を(緑、オレンジ、赤に)変更したいと思います。
私はこの問題に対して多くのアプローチを試みましたが、そのような運はありませんでした。誰かが救いの手を貸してくれませんか?
代わりにListViewを使用してください。チェックボックスと選択したアイテムの色をサポートしています。
ここに非常によく似た答えがあります:
CheckedListBoxの<item>ごと。<item>は、コントロールではなくオブジェクトとして返されます
基本的に、このコントロールはあなたが望むことをしません(少なくともそれほど複雑ではありません)。コントロールを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