搜索列表框并返回在另一个字段中定义的特定项目数 - VB.net

时间:2013-11-17 00:32:22

标签: vb.net listbox

我正在运行搜索查询,从一个文本框中提取搜索字符串,然后在列表框中搜索字符串,并在第二个列表框中显示结果。我想根据第二个文本框定义它返回的项目数。到目前为止,我能够获得所有列表项,并在第二个框中显示字符串。但是我还没有把搜索限制为1项等等。我用来显示所有结果的功能代码是:

Private Sub btnGo_Click(sender As Object, e As EventArgs) Handles btnGo.Click

    lstResults.Items.Clear()
    If txtSearch.Text.Length > 0 Then
        For index As Integer = 0 To lstCountries.Items.Count - 1
            Dim txt = lstCountries.Items(index).ToString()
            If txt.StartsWith(txtSearch.Text, StringComparison.CurrentCultureIgnoreCase) Then
                lstResults.Items.Add(txt)
            End If
        Next
    End If

我之前尝试过使用while txtnumber.text > 1 then,但似乎已经创建了一个循环。关于我缺少的任何想法?

2 个答案:

答案 0 :(得分:0)

数据源将对有多少结果有最终决定权。如果用户指定3并且源中只有2,那就是你将获得的全部内容。像这样的东西会将结果从一个移动到另一个,直到找到最大值:

Dim Max as integer = Convert.Toint32(txtNumber.Text)
Dim Count as integer = 0

lstResults.Items.Clear()

 For index As Integer = 0 To lstCountries.Items.Count - 1

        if lstCountries.Items(index).StartsWith(txtSearch.Text, StringComparison.CurrentCultureIgnoreCase) Then
            lstResults.Items.Add(lstCountries.Items(index))
            count += 1
        end if

        ' exit the loop if we found enough
        If count>= Max Then
            Exit For               
        End If
  Next

如果列表框只包含文本(字符串),那么您不需要ToString:lstCountries.Items(index).StartsWith(strSearch)。基本上,一旦找到用户想要的号码,你需要退出循环,或者如果你的数据用完了......如果我理解正确的话。 while txtnumber.text > 1不起作用,因为文本框包含的字符串不是数字(23与" 23"不同)。

答案 1 :(得分:0)

LINQ扩展也适用于此:

    lstResults.Items.AddRange((From item In lstCountries.Items
                             Let strItem As String = item.ToString
                             Where strItem.StartsWith(txtSearch.Text, StringComparison.CurrentCultureIgnoreCase)
                             Select strItem).Take(Integer.Parse(txtnumber.Text)).ToArray)

这假定您的所有数据都已经过验证。