【问题标题】:Keep listview item backcolor when row selected选择行时保持列表视图项目背景色
【发布时间】:2013-07-09 18:59:07
【问题描述】:

我有一个包含多个子项的列表视图控件。根据记录,其中一个子项列具有红色、橙色或绿色的背景颜色。选择行时,我希望彩色子项保留其背景色,而不是被选择颜色覆盖。这可能吗?

【问题讨论】:

  • 那你怎么知道哪个项目被选中了?我所说的“您”是指“您的应用程序的用户”。
  • WPF 还是 WinForms ?在 WPF 中,您必须修改项目的模板。
  • 它在 vb.net winforms 中,其他列(子项)会显示选择,但这个特定列不会。
  • 我过去曾用我使用过的 datagridview 做过类似的事情; dgvAr.CurrentRow.Cells(3).Style.SelectionBackColor = dgvAr.CurrentRow.Cells(3).Style.BackColor 但无法获得与在列表视图中工作等效的任何内容。

标签: vb.net


【解决方案1】:

ListView1.OwnerDraw 设置为True

在 ListView1 的 Draw... 事件中:

Private Sub ListView1_DrawColumnHeader(sender As Object, e As DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader
    e.DrawDefault = True ' let System draw this element
End Sub

Private Sub ListView1_DrawItem(sender As Object, e As DrawListViewItemEventArgs) Handles ListView1.DrawItem
    e.DrawDefault = True ' let System draw this element
End Sub

Private Sub ListView1_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListView1.DrawSubItem
    If e.ColumnIndex = 2 Then ' only this columnindex we take over the drawing job
        e.DrawBackground() ' draw the background color
        e.DrawText()
    Else ' other subitems, let System draw them
        e.DrawDefault = True
    End If
End Sub

【讨论】:

  • 这是很久以前的事了,但是当我所有试图覆盖 OnMouseMove 和 OnItemMouseHover 的尝试都没有成功时,这很有效。感谢您展示它可以用几行代码在图纸上完成
猜你喜欢
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
相关资源
最近更新 更多