如何检查列表视图中子项中字符串的长度 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
我有一个包含四列的列表视图。我想检查第四列,看看字符串的长度。 请注意,此列的某些行中有两行,如下图所示。 这些行上的每一行都应该单独计算。如果一行超过 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