VB.NET如何检测ListView第四列子项每行字符串长度并修改行背景色
实现方案
核心修改点
- 原有代码只读取了ListView第一列的内容,需要调整为读取第4列的
SubItems(3)属性(ListView列索引从0开始计数,第一列对应索引0,第四列对应索引3) - 第四列的多行内容按换行符拆分后逐行校验长度,只要任意一行字符数超过38就触发背景色修改
- 去掉不必要的行选中操作,直接修改对应行的背景色属性,避免干扰界面正常选中状态
完整可运行代码
' 遍历ListView所有行 For i = 0 To ListView1.Items.Count - 1 ' 读取第四列内容,索引如果不对可根据实际列顺序调整数值 Dim targetColumnText As String = ListView1.Items(i).SubItems(3).Text ' 按换行符拆分多行内容,兼容Windows/类Unix两种换行格式 Dim lineArr As String() = targetColumnText.Split({vbCrLf, vbLf}, StringSplitOptions.None) Dim isOverLength As Boolean = False ' 逐行判断字符长度 For Each line As String In lineArr If line.Length > 38 Then isOverLength = True Exit For End If Next ' 根据判断结果设置背景色 If isOverLength Then ListView1.Items(i).BackColor = Color.FromArgb(216, 141, 111) Else ' 未超长度时恢复默认背景色,不需要可以删除这行 ListView1.Items(i).BackColor = SystemColors.Window End If Next i
额外注意事项
- 如果你的ListView启用了虚拟模式或者绑定了数据源,建议把这段逻辑放在
DrawItem事件或者数据绑定完成的回调中执行,避免滚动时背景色丢失 - 如果存在隐藏列导致第四列的索引不是3,把代码里的
SubItems(3)改成对应实际索引即可
内容的提问来源于stack exchange,提问作者vahid Araghi
相关产品推荐
相关产品推荐

