获取ListBox和TextBox的匹配值VB.NET

获取ListBox和TextBox的匹配值VB.NET,vb.net,textbox,listbox,vb.net-2010,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中获得匹配的值 像 如果值匹配,则执行一些操作代码,并循环直到最后一个值匹配 我使用过这个代码,但它没有给出准确的输出 Dim compare As String Dim comparear() As String Dim list As

我有一个包含一些值的listbox1

value 1
value 2
value 3
value 4
value 5
和包含一些行的TextBox1

Value 3
Value 5
Value 10
Value 14
我想在listbox1和TextBox1中获得匹配的值 像

如果值匹配,则执行一些操作代码,并循环直到最后一个值匹配

我使用过这个代码,但它没有给出准确的输出

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
你可以写

Dim result = listBox1.Items.OfType(Of String).Intersect(textBox1.Lines)
Dim result = listBox1.Items.OfType(Of String) _
    .Intersect(textBox1.Lines, StringComparer.OrdinalIgnoreCase)
结果的类型为
IEnumerable(字符串的)
。也就是说,您可以将其用于每个或添加
.ToList
.ToArray
以获取集合

请注意,匹配项区分大小写。如果你想忽略这个案例,你可以写

Dim result = listBox1.Items.OfType(Of String).Intersect(textBox1.Lines)
Dim result = listBox1.Items.OfType(Of String) _
    .Intersect(textBox1.Lines, StringComparer.OrdinalIgnoreCase)
由于ListBox项是作为对象返回的,所以我使用
listBox1.Items.OfType(Of String)
将它们转换为字符串


正如我在您添加的代码示例中所看到的,您正在比较两个文本框的行,并将结果放入第三个文本框中,您可以使用这两个代码行来完成

Dim result = textBox1.Lines.Intersect(textBox2.Lines, StringComparer.OrdinalIgnoreCase)
txt_match.Text = String.Join(vbNewLine, result)

如果要比较两个列表框的项目

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)
。因此,无论您使用的是
文本框
的行,还是
列表框
铸造到
T
或数组或
列表(T)
或其他任何内容,都无关紧要


由于两个不同的错误,您的代码无法工作:

  • 您有
    选项严格关闭
    。这会隐藏一个错误,显示您调用的
    Split
    重载错误。VB尝试将
    vbNewLine
    (一个字符串)转换为字符,并使用
    vbNewLine
    中找到的第一个字符调用
    Split
    。在项目中使用
    选项Strict On
    ,您将得到一个编译错误。写下这个
  • 您的匹配项区分大小写。而是像这样比较

请尝试我认为您的匹配不区分大小写?不,不区分大小写好的,您做了什么,我们可以进一步帮助您。请向我们展示一次尝试。@Chođěxěŕ看我的代码,它没有给出准确的输出。@downvoter,请评论。此代码创建列表框和文本框中的值的集合交集,即返回问题中要求的公共值或匹配值。您提供的代码基于什么,如果OP发布了他们的解决方案(代码),那么它将为我们提供一些信息。目前,您提供的“可能”解决方案可能解决用户问题,也可能无法解决用户问题。那么这对OP有什么帮助呢?OP说他在一个列表框和一个文本框中有文本,他想比较其中的项目/行,a提供了一个合适的答案。如果你认为这个问题不好,那么就否决这个问题,而不是答案。你没有抓住要点。你提供了一个答案,而OP甚至没有发布有问题的代码,如果OP没有发布代码,你怎么可能告诉OP他们错在哪里?根据您上面的陈述,
您的代码比较两个文本框。不是你在问题中所说的列表框和文本框
,这进一步验证了我的陈述。恕我直言,我会澄清并要求OP发布他们的代码,而不是抛出答案。@preciousbetine来自Microsoft文档“Public Const vbNewLine As String”这是过时的,但它绝对是一个字符串。
If listar(p).ToLowerInvariant = comparear(i).ToLowerInvariant Then