0

これは VB の WinForms アプリケーションです。私のアプリケーションでは、アイテムのテキストの色に基づいて、ユーザーがリスト内のアイテムをすばやく簡単に選択できるようにしようとしています。そのため、以下のように select case ステートメントを使用して各アイテムに色を割り当てようとしています...問題は、「タイプ 'String' のパブリック メンバー 'Attributes' が見つかりません」というエラーが表示されることです。VB は、このエラーで Attribute.Add パラメーターを使用して行にフラグを立てます。現在持っているコードは次のとおりです...

   For Each u In _units
                _counter += 1
                u_lookupNumber_box.Items.Add((Convert.ToString(u.UnitId)) + " - " + (Convert.ToString(u.perMonthCost)))
                Select Case u.occupied
                    Case Is = 0
                        u_lookupNumber_box.Items(_counter - 1).Attributes.add("style", "color: Yellow")
                    Case Is = 1
                        u_lookupNumber_box.Items(_counter - 1).attributes.add("style", "color: Green")
                    Case Is = 2
                        u_lookupNumber_box.Items(_counter - 1).attributes.add("style", "color: Red")
                    Case Is = 3
                        u_lookupNumber_box.Items(_counter - 1).attributes.add("style", "color: Blue")
                    Case Is = 4
                        u_lookupNumber_box.Items(_counter - 1).attributes.add("style", "color: Orange")
                    Case Is = 5
                        u_lookupNumber_box.Items(_counter - 1).attributes.add("style", "color: Purple")
                End Select
            Next

このエラーが発生する理由はありますか?? 「。」を押したときに.attributes部分を実行したときに気づきました。「att」と入力すると、vbのインテリセンスボックスに表示されませんでした..これにより、「属性」という名前を最初にドロップダウンボックスに割り当てる必要があると思います..すべての助けに感謝します...

u_lookupNumber_box は、フォームのドロップダウン ボックスの名前であることに注意してください。

4

2 に答える 2

1

attributesListBox.Itemsプロパティのメソッドではありません。クラスのドキュメントを見てください。ListBox.ObjectCollection例がありOwnerDrawn ListBoxます。私はこれまたは同様のものがあなたの唯一の選択肢になると信じています。

于 2012-04-18T01:49:47.813 に答える
1

わかりましたので、長いパンくずリストの検索と少しの試行錯誤を経て、完全に機能するようになりました... drawItem イベント引数の絶え間ない処理のため、あまり満足していませんが、それ以外は期待どおりに機能します。 .. まず、ドロップダウンの DrawMode プロパティを OwnerDrawFixed に設定します。次に、フォームクラスに次のような構造を作成しました。

Public Structure ColoredUnitItem
    Dim text As String
    Dim color As Color
    Dim bold As Boolean
    Public Overrides Function ToString() As String
        Return text
    End Function
End Structure

これは、実際には各アイテムのすべての属性を保持します..

次に、投稿された元のコードを次のように変更しました。

For Each u In _units
                _counter += 1
                Dim myItem As New ColoredUnitItem
                With myItem
                    .text = (Convert.ToString(u.UnitId)) + " - " + (Convert.ToString(u.perMonthCost))
                    Select Case u.occupied
                        Case Is = 0
                            .color = Color.Yellow
                        Case Is = 1
                            .color = Color.Green
                        Case Is = 2
                            .color = Color.Red
                        Case Is = 3
                            .color = Color.Blue
                        Case Is = 4
                            .color = Color.Orange
                        Case Is = 5
                            .color = Color.Purple
                    End Select
                End With
                u_lookupNumber_box.Items.Add(myItem)
            Next

次に、次のようにフォームにドロップダウン リストを描画するだけで済みました。

Private Sub uLookUpNumberBox_Draw(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles u_lookupNumber_box.DrawItem
    e.DrawBackground()
    If Not e.Index = -1 Then
        Dim myItem As ColoredUnitItem = DirectCast(u_lookupNumber_box.Items(e.Index), ColoredUnitItem)
        Dim FontToUse As Font = e.Font
        If myItem.bold Then
            FontToUse = New Font(e.Font, FontStyle.Bold)
        End If
        e.Graphics.DrawString(myItem.text, FontToUse, New SolidBrush(myItem.color), e.Bounds)
        e.DrawFocusRectangle()
    End If
End Sub

フローは従うのが簡単で、うまくいきます..

于 2012-04-18T02:14:05.777 に答える