获取ListBox和TextBox匹配值VB.NET

问题描述 投票:-1回答:1

我有一个包含一些值的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
vb.net textbox listbox vb.net-2010
1个回答
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个ListBoxes的项目

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的线,ItemsListBoxT或阵列或List(Of T)或其他任何东西都行。


由于2个不同的错误,您的代码无效:

  • 你有Option Strict Off。这隐藏了一个错误,显示您正在调用Split的错误重载。 VB尝试将vbNewLine(这是一个String)转换为Char,并使用Split中找到的第一个char调用vbNewLine。在项目中使用Option Strict On,您将收到编译错误。写下这个
comparear = compare.Split(New String() {vbNewLine}, StringSplitOptions.RemoveEmptyEntries)
listar = list.Split(New String() {vbNewLine}, StringSplitOptions.RemoveEmptyEntries)
  • 您的匹配区分大小写。而是像这样比较
If listar(p).ToLowerInvariant = comparear(i).ToLowerInvariant Then

推荐问答