我正在运行搜索查询,从一个文本框中提取搜索字符串,然后在列表框中搜索字符串,并在第二个列表框中显示结果。我想根据第二个文本框定义它返回的项目数。到目前为止,我能够获得所有列表项,并在第二个框中显示字符串。但是我还没有把搜索限制为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
,但似乎已经创建了一个循环。关于我缺少的任何想法?
答案 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)
这假定您的所有数据都已经过验证。