【问题标题】:Listview - Multi column - Change selection color for the whole rowListview - 多列 - 更改整行的选择颜色
【发布时间】:2023-04-06 21:05:01
【问题描述】:

我想更改 ListView 中的选择颜色,而不是默认颜色(蓝色)。我无法根据自己的需要调整找到的任何代码。

这是最接近的代码。

  If e.Item.Selected = True Then
        e.Graphics.FillRectangle(New SolidBrush(Color.Gray), e.Bounds)
        TextRenderer.DrawText(e.Graphics, e.Item.Text, New Font(ListView2.Font, Nothing), New Point(e.Bounds.Left + 3, e.Bounds.Top + 2), Color.White)
    Else
        e.DrawDefault = True
    End If

主要问题是e.Item.Text 部分。它不适用于多列列表视图。结果如下。

选择前:

...之后:

是否可以保留其他列的值并仍然选择完整的行?

谢谢。

【问题讨论】:

    标签: vb.net listview colors selection


    【解决方案1】:

    使用 OwnerDraw Listview 要记住的是,如果控件是 Details View: @987654324,则有 2 个事件 需要响应(或者如果您是子类化则覆盖) @ 和 DrawSubItem。

    当控件使用不同的View 并且没有要绘制的子项时,将使用DrawItem。

    由于SubItems(0) 与Item.Text 相同,您可以使用DrawSubItem 来绘制项目和子项目文本。我不知道该 sn-p 的位置,但这会起作用:

    Private Sub lv1_DrawSubItem(sender As Object, 
           e As DrawListViewSubItemEventArgs) Handles lv1.DrawSubItem
    
        ' use sender instead of a hardcodes control ref so 
        ' you can paste this to another LV
        Dim myLV As ListView = CType(sender, ListView)
    
        If e.ItemIndex > 0 AndAlso e.Item.Selected Then
            Using br As New SolidBrush(Color.Gray)
                e.Graphics.FillRectangle(br, e.Bounds)
            End Using
    
            Using fnt As New Font(myLV .Font, Nothing)
            ' use e.SubItem.Text
                TextRenderer.DrawText(e.Graphics, e.SubItem.Text,
                              fnt,
                              New Point(e.Bounds.Left + 3, e.Bounds.Top + 2),
                              Color.White)
            End Using     ' dispose!
        Else
            e.DrawDefault = True
        End If
    
    End Sub
    

    看来您可能使用了正确的事件,但通过使用Item.Text 而不是e.SubItem.Text,还将为所有子项目绘制项目文本(DrawSubItem 将被调用多次子项)。

    请注意,我还将Font 包装在Using 块中以处理它。使用 LimeGreen,结果:

    【讨论】:

    • 谢谢Plutonix,你帮了我很多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多