如何检查列表视图中子项中字符串的长度 VB .NET

How to check length of string in subitem in listview VB .NET

我有一个包含四列的列表视图。我想检查第四列,看看字符串的长度。 请注意,此列的某些行中有两行,如下图所示。 这些行上的每一行都应该单独计算。如果一行超过 38 个字符,行背景会改变,我可以这样做吗? 谢谢大家

像这样:

这是我的 listview 代码,其中包含一列:

 For i = 0 To ListView1.Items.Count - 1
                ListView1.Items(i).Selected = True
                If ListView1.Items(i).Text.Count > 38 Then
                    ListView1.SelectedItems(i).BackColor = Color.FromArgb(216, 141, 111)
                 
                Else
                End If
            Next i

如果您的意思是第四列中的 HTML 换行标记 <br /> 是作为换行标识符存在的并且您想要更改子项的背景颜色 if任意一行的长度大于38,那么可以这样写:

For Each lvi As ListViewItem In ListView1.Items
    If lvi.SubItems.Count > 2 Then
        lvi.UseItemStyleForSubItems = False
        If lvi.SubItems(3).Text.
            Split({"<br/>", "<br />"}, StringSplitOptions.RemoveEmptyEntries).
            Any(Function(line) line.Length > 38) Then
            lvi.SubItems(3).BackColor = Color.FromArgb(216, 141, 111)
        Else
            lvi.SubItems(3).BackColor = SystemColors.Window
        End If
    End If
Next

如果您需要更改 ListViewItem 的背景颜色:

For Each lvi As ListViewItem In ListView1.Items
    If lvi.SubItems.Count > 2 Then
        lvi.UseItemStyleForSubItems = True 'The default.
        If lvi.SubItems(3).Text.
            Split({"<br/>", "<br />"}, StringSplitOptions.RemoveEmptyEntries).
            Any(Function(line) line.Length > 38) Then
            lvi.BackColor = Color.FromArgb(216, 141, 111)
        Else
            lvi.BackColor = SystemColors.Window
        End If
    End If
Next

没有 Linq 代码。有时更容易遵循。我知道 Linq 很酷,但它并没有更快。

Private Sub FindLongLines()
    For Each itm As ListViewItem In ListView1.Items
        Dim TurnBrown As Boolean
        Dim lines = itm.SubItems(3).Text.Split({"<br/>"}, StringSplitOptions.RemoveEmptyEntries)
        For Each line In lines
            If line.Length > 38 Then
                TurnBrown = True
                Exit For 'as soon as any line is found longer than 38 further checking is unnessary.
            End If
        Next
        If TurnBrown Then
            itm.SubItems(3).BackColor = Color.Brown
        End If
    Next
End Sub