2017-04-23 51 views
0

我有一個列表框中的國家名稱數組。當我輸入文本框時,我想要任何以顯示文本框中的內容開始的國家。如何在數組中使用部分搜索並輸出結果?

所以,如果我輸入:B => razil

不喜歡這樣的:A =>一個 rgentina,英格蘭一個第二

只有當它與什麼是在文本框中開始。完整的單詞也可以工作。

arraylist不僅包含名稱,但下面的代碼只提取名稱。 List2是我想用於搜索的ArrayList。

private void textBox7_TextChanged(object sender, EventArgs e) 
    { 
     listBox1.ClearSelected(); 
     listBox1.DataSource = null; 
     foreach (Country name2 in Mytree.List) 
     { 
      List2.Add(name2.name); 
      Console.WriteLine(List2); 
     } 
    } 
+0

目前尚不清楚你想要做什麼。你想添加到你的列表框的所有國家的名稱開始你的文本框中輸入的文本?順便說一句,你只是試圖幫助你最終使用,而不用輸入所有的名字來選擇一個特定的國家?您是否嘗試過使用TextBox的自動完成功能? – Steve

回答

0

private void textBox7_TextChanged(object sender, EventArgs e) 
{ 
    listBox1.ClearSelected(); 
    listBox1.DataSource = null; 
    var matchingCountries = Mytree.List.Where(l=>l.name.StartsWith(textBox7.Text)); 
    foreach (Country name2 in matchingCountries) 
    { 
      listBox1.Items.Add(name2.name); 
    } 
} 
+0

這幾乎可以工作,它會創造重複。所以巴西這個詞創造了巴西的6個實例,正如我所說的那樣。 –

0

不太清楚,但你會想看看像

listBox1.DataSource = Mytree.List.Where(a=>a.name.StartsWith(textBox7.Text) 

你使用foreach循環添加每個例子中,列表框的數據源設置的東西項目有點多餘。

+0

這適用於第一個字符。如果我想要檢查單詞的每個字符,那麼呢? –

+0

這不是真的,如果你把它放在TextChanged事件上,它會加載組合框和Mytree.List中的所有值,其中項目「name」屬性StartsWith無論在文本框中的任何值。 –

+0

如果有智利和中國,StartsWith會給我兩個。我怎樣才能縮小搜索範圍? StartsWith只查看第一個字符。 –

1

如果您的目標是要避免鍵入完整的國家名稱,那麼就不需要重新創建一種新的用戶界面。 TextBox已經擁有了所有可用於執行您的代碼重現的管道。所有你需要的是你的數據來源和設置一對屬性

// Create the list to use as the custom source. 
var source = new AutoCompleteStringCollection(); 
source.AddRange(new string[] 
{ 
    "Argentina", 
    "England", 
    "Brazil", 
    "Italy", 
    "..." 
}); 

textBox1.AutoCompleteCustomSource = source; 
textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend; 
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; 
相關問題