我有一个包含一些值的listbox1
value 1
value 2
value 3
value 4
value 5
和包含一些行的TextBox1
Value 3
Value 5
Value 10
Value 14
我想获取与listbox1和TextBox1匹配的值 喜欢
Value 3
Value 5
如果值匹配则执行一些操作代码,并循环直到最后一个值匹配
我使用了这段代码,但是没有给出准确的输出。
Dim compare As String
Dim comparear() As String
Dim list As String
Dim listar() As String
compare = TextBox1.Text
comparear = compare.Split(vbNewLine)
list = TextBox2.Text
listar = list.Split(vbNewLine)
For i = 0 To comparear.Length - 1
For p = 0 To listar.Length - 1
If listar(p).Contains(comparear(i)) Then
txt_match.Text = txt_match.Text & listar(p) & vbNewLine
Else
End If
Next
Next
答案 0 :(得分:1)
你可以写
Dim result = listBox1.Items.OfType(Of String).Intersect(textBox1.Lines)
结果的类型为IEnumerable(Of String)
。也就是说,您可以在For Each中使用它,也可以添加.ToList
或.ToArray
来获取集合。
请注意,匹配项区分大小写。如果您想忽略这种情况,可以写
Dim result = listBox1.Items.OfType(Of String) _
.Intersect(textBox1.Lines, StringComparer.OrdinalIgnoreCase)
由于ListBox项作为对象返回,因此我使用listBox1.Items.OfType(Of String)
将它们转换为字符串。
正如我在添加的代码示例中所看到的,您正在比较2个TextBoxes的行并将结果加入第3行,您可以使用这2条代码行完成
Dim result = textBox1.Lines.Intersect(textBox2.Lines, StringComparer.OrdinalIgnoreCase)
txt_match.Text = String.Join(vbNewLine, result)
如果您想比较2个列表框的项目
Dim r = listBox1.Items.OfType(Of String) _
.Intersect(listBox2.Items.OfType(Of String), StringComparer.OrdinalIgnoreCase)
Intersect
适用于任何两个相同类型的枚举或集合
A.Intersect(B)
返回一个IEnumerable(Of T)
,其中A
和B
本身都是IEnumerable(Of T)
。因此,是否使用TextBox
的行,转换为Items
的{{1}}的{{1}}的行,数组或ListBox
或其他任何东西都没关系
由于两个不同的错误,您的代码无法正常工作
T
。这隐藏了一个错误,表明您正在调用错误的List(Of T)
重载。 VB尝试将Option Strict Off
(它是一个字符串)转换为Char,然后用Split
中找到的第一个char调用vbNewLine
。在项目中使用Split
,您会得到一个编译错误。改写这个vbNewLine
Option Strict On