获取ListBox和TextBox匹配值VB.NET

时间:2019-01-25 17:44:46

标签: vb.net textbox listbox vb.net-2010

我有一个包含一些值的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

1 个答案:

答案 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),其中AB本身都是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