3

CheckedListBoxを使用してアイテムを格納するVB.NETで個人用アプリケーションを作成しています。フォームに3つのボタンがあり、選択したアイテムの色を(緑、オレンジ、赤に)変更したいと思います。

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

4

4 に答える 4

3

代わりにListViewを使用してください。チェックボックスと選択したアイテムの色をサポートしています。

于 2011-05-30T20:42:30.030 に答える
1

ここに非常によく似た答えがあります:

CheckedListBoxの<item>ごと。<item>は、コントロールではなくオブジェクトとして返されます

基本的に、このコントロールはあなたが望むことをしません(少なくともそれほど複雑ではありません)。コントロールをListViewにアップグレードする必要があります。

于 2011-05-30T20:44:30.717 に答える
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
于 2011-05-30T20:46:08.203 に答える
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
于 2011-07-14T17:53:30.150 に答える