2013-09-28 50 views
2

我知道我可以使用.FindString進行此操作,但由於某種原因,它不起作用。檢查列表框是否包含文本框

基本上,如果列表框項只包含文本框文本的一部分,它會執行操作。

這裏是未加工的代碼示例:

Dim x As Integer = -1 
     x = ListBox1.FindString(TextBox1.Text) 
     If x > -1 Then 
      'dont add 
      ListBox2.Items.Add("String found at " & x.ToString) 
     Else 

     End If 
+0

我希望我的回答很清楚:您必須使用FindStringExact而不是FindString來匹配整個項目。例如:如果ListBox包含「test1」,「test」;如果你在'test「(或」tes「或」te「等)中使用'FindString',它會返回第一個項目。另一方面,如果使用'FindStringExact'也與「test」一起使用,它將返回第二項(並且不會找到任何含有「tes」,「te」等的內容)。 – varocarbas

+0

@varocarbas如果文本框包含'foo.txt'並且列表框包含'C:\ Users \ foo.txt',那麼它將不起作用(我的意思是.findstring和.findstringexact) – Jedi

+0

這就是我在我的回答中所說的:如果你想要更復雜的功能,你將不得不通過每個元素進行交互。在這種情況下,您必須對所有項目執行foreach循環,併爲每個項目使用'.Contains'(並在找到時使用'Exit For')。 foreach循環非常快,不應該影響性能。請記住'FindString'或'findstringexact'正是這樣做的(遍歷所有項目)。下一次,請描述你的確切條件,我可以寫下一個工作代碼,提供你想要的確切結果(如果你願意,可以現在就做)。 – varocarbas

回答

3

FindString方法返回與搜索字符串(MSDN)開始的第一個項目。如果要匹配整個項目,則必須使用FindStringExactMSDN)。如果您想執行更復雜的搜索,則必須迭代ListBox中的所有元素。

更新: 代碼提供OP所期望的確切功能。

For i As Integer = 0 To ListBox1.Items.Count - 1 
    If (ListBox1.Items(i).ToString.Contains(TextBox1.Text)) Then 
     ListBox2.Items.Add("String found at " & (i + 1).ToString) 'Indexing is zero-based 
     Exit For 
    End If 
Next 
+0

謝謝,一會兒就試試.EDIT:像魅力一樣工作,感謝您的工作。 – Jedi

+0

@Jedi沒問題。我猜你想要輸出從1開始的結果(我的代碼中的索引從零開始),這就是爲什麼'(i + 1).ToString'。你也可以考慮比較'ListBox1.Items(i).ToString.ToLower.Contains(TextBox1.Text.ToLower')中的'ToLower',以便忽略大小寫。 – varocarbas

+0

@Jedi我很高興看到這一點。請下次儘可能描述(在你的問題中,也可以通過詢問,請求等)。我在這裏幫忙;但如果我不知道你需要什麼,我無法幫助你。 – varocarbas