返回与条件匹配的列表框项数组 - Vb.net



我目前为ListView设置了这个。但是想知道是否有类似的方法可以使用ListBox来做到这一点。我想返回一个与条件匹配的项目数组(在这种情况下,返回列表框中与applicationName匹配的项目,这是一个字符串)。

我已经包含了适用于我的列表视图的内容:

Dim listviewitem As ListViewItem
Dim ListViewItems() As ListViewItem = Me.ApplicationsListView.Items.Find(applicationName, True)
For Each listviewitem In ListViewItems
listviewitem.Checked = True
Next

我似乎无法将其与ListBox一起使用的原因是它没有Find方法进行Me.ApplicationsListBox.Items。想知道列表框是否有类似的方法。

这是一个扩展方法,它将以可枚举列表的形式返回ListBox中具有特定文本的所有项目:

Imports System.Runtime.CompilerServices
Public Module ListBoxExtensions
<Extension>
Public Iterator Function Find(source As ListBox, value As String) As IEnumerable(Of Object)
Dim items = source.Items
For i = 0 To items.Count - 1
Dim item = items(i)
If source.GetItemText(item) = value Then
Yield item
End If
Next
End Function
End Module

下面是一些示例用法:

Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim table As New DataTable
With table.Columns
.Add("Id", GetType(Integer))
.Add("Name", GetType(String))
End With
With table.Rows
.Add(1, "Peter")
.Add(2, "Paul")
.Add(3, "Mary")
.Add(4, "Peter")
End With
ListBox1.DisplayMember = "Name"
ListBox1.DataSource = table
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim peters = ListBox1.Find("Peter").ToArray()
For Each row As DataRowView In peters
Console.WriteLine(row("Id"))
Next
End Sub
End Class

调试该代码时,该"输出"窗口将显示以下内容:

1 4

您可以按原样使用该代码,也可以根据需要调整原理。传递修改方法以接受谓词,然后匹配您喜欢的任何方式。如果您愿意,可以修改代码以直接在窗体中使用,而不是作为扩展使用。重要的是原则。

最新更新