如何在列表视图中选择背景颜色

时间:2014-07-13 02:24:45

标签: vb.net listview

如何使用vb.net将背景颜色设置为列表视图对象中所选行的选定颜色。

我确实看到了一个示例,其中Ownerdraw设置为true - 但它会弄乱列标题。虽然我能够循环子项以使行选择颜色为背景颜色

这是代码块:

  For i = 0 To LV_ProductsEdit.SelectedItems.Item(0).SubItems.Count - 1
        LV_ProductsEdit.SelectedItems.Item(0).SubItems(i).BackColor = Color.Gold
   Next

我有一个类似的循环,在选择新项目时将其恢复为原始透明色。

任何想法。

由于

欧麦

2 个答案:

答案 0 :(得分:0)

我仍然不太确定问题是什么。你不需要通过SubItems循环。每个项目都有一个UseItemStyleForSubItems属性,告诉子项使用相同的Font,ForeColor和BackColor作为父项。默认为True,因此设置Item backcolor应该足够了:

For Each lvi As ListViewItem In myLV.SelectedItems
    lvi.BackColor = Color.Gold
Next

原始颜色不是透明的,但应该是SystemColors.Window


您还可以将HideSelection重置为False。当LV没有焦点时,所选项目仍然会突出显示(灰色),这似乎是您在原始问题中提出的问题。

答案 1 :(得分:0)

如果您只想将选择颜色从蓝色更改为其他颜色,请参阅我发现的代码。首先,将ownerdraw设置为true。这里,我的listview被称为ListViewQuote。

Private Sub ListViewQuote_DrawColumnHeader(sender As Object, e As DrawListViewColumnHeaderEventArgs) Handles ListViewQuote.DrawColumnHeader
    e.DrawDefault = True
End Sub

Private Sub ListViewQuote_DrawItem(sender As Object, e As DrawListViewItemEventArgs) Handles ListViewQuote.DrawItem
    If e.Item.Selected = False Then
        e.DrawDefault = True
    End If
End Sub

Private Sub ListViewQuote_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListViewQuote.DrawSubItem
    If e.Item.Selected = True Then
        e.Graphics.FillRectangle(New SolidBrush(FromArgb(255, 0, 0)), e.Bounds)
        TextRenderer.DrawText(e.Graphics, e.SubItem.Text, New Font(Me.Font, Nothing), New Point(e.Bounds.Left + 3, e.Bounds.Top + 2), HighlightText)
    Else
        e.DrawDefault = True
    End If
End Sub

要改变我的颜色,只需将" New SolidBrush(FromArgb(255,0,0)"更改为您想要的画笔。文本的前景色为" HighlightText& #34;也可以改为任何颜色。

这适用于列表视图的详细信息视图。


相关问题