You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现ListView点击行(Item)时同步高亮对应图片?

实现ListView行点击时对应图片高亮的方案

前提准备

首先需要确保ListView的每个条目(Item)和对应的图片建立关联,关联方式可以根据你的图片存储方式选择:


方式一:用ImageList管理图片(Tile视图自带图片)

如果你的图片是放在ListView的Tile中显示,推荐用ImageList来管理正常和高亮两种状态的图片:

  1. 添加ImageList控件:在窗体上添加ImageList控件(命名为ImageList1),将正常状态的图片和高亮状态的图片依次添加进去(比如索引0是正常图,索引1是高亮图)。
  2. 绑定ImageList到ListView:在代码里设置:
    ListView2.LargeImageList = ImageList1
    
  3. 修改条目添加代码:给每个Item设置初始的图片索引:
    Dim people = {
        New With {
                Key .FirstName = "FirstName",
                Key .Email = "firstname@emal.com",
                Key .Country = "USA"
                },
        New With {
                Key .FirstName = "FirstName1",
                Key .Email = "firstname1@emal.com",
                Key .Country = "USA"
                }
    }
    For Each person In people
        Dim item As New ListViewItem(person.FirstName)
        item.SubItems.Add(person.Email)
        item.SubItems.Add(person.Country)
        item.ImageIndex = 0 ' 默认显示正常状态图片
        ListView2.Items.Add(item)
    Next person
    
  4. 处理选中事件:添加SelectedIndexChanged事件,切换选中条目的图片索引实现高亮:
    Private Sub ListView2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView2.SelectedIndexChanged
        ' 恢复所有条目的正常图片
        For Each item As ListViewItem In ListView2.Items
            item.ImageIndex = 0
        Next
        ' 给选中条目设置高亮图片
        If ListView2.SelectedItems.Count > 0 Then
            ListView2.SelectedItems(0).ImageIndex = 1
        End If
    End Sub
    

方式二:关联独立的PictureBox控件

如果图片是放在单独的PictureBox中(比如ListView侧边的头像),可以通过Tag属性关联条目和PictureBox:

  1. 关联条目与PictureBox:在添加条目时,把对应的PictureBox引用存在Item的Tag里:
    ' 假设窗体上有PictureBox1、PictureBox2对应两个条目
    For i = 0 To people.Length - 1
        Dim person = people(i)
        Dim item As New ListViewItem(person.FirstName)
        item.SubItems.Add(person.Email)
        item.SubItems.Add(person.Country)
        ' 将对应的PictureBox存入Tag
        item.Tag = If(i = 0, PictureBox1, PictureBox2)
        ListView2.Items.Add(item)
        ' 初始设置正常样式(比如无边框)
        DirectCast(item.Tag, PictureBox).BorderStyle = BorderStyle.None
    Next
    
  2. 处理选中事件:在事件中切换PictureBox的样式实现高亮:
    Private Sub ListView2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView2.SelectedIndexChanged
        ' 恢复所有PictureBox的正常样式
        For Each item As ListViewItem In ListView2.Items
            Dim pb As PictureBox = DirectCast(item.Tag, PictureBox)
            pb.BorderStyle = BorderStyle.None
            ' 若用图片切换则替换为正常图:pb.Image = My.Resources.NormalAvatar
        Next
        ' 给选中条目对应的PictureBox设置高亮样式
        If ListView2.SelectedItems.Count > 0 Then
            Dim selectedPb As PictureBox = DirectCast(ListView2.SelectedItems(0).Tag, PictureBox)
            selectedPb.BorderStyle = BorderStyle.FixedSingle ' 用边框表示高亮
            ' 若用图片切换则替换为高亮图:selectedPb.Image = My.Resources.HighlightedAvatar
        End If
    End Sub
    

高亮效果自定义

你可以根据需求调整高亮方式:

  • 给图片添加带颜色的边框
  • 替换为预先制作的高亮版本图片
  • 调整图片的透明度或背景色
  • 给图片添加阴影效果

内容的提问来源于stack exchange,提问作者Archi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 11:47:28