所以,我有一個列表框,其中有x個項目。在列表框的頂部,我有一個文本框(這是搜索字段)。我嘗試開發一種從列表框中刪除項目的算法,如果它不包含搜索詞(代碼中的可變關鍵字)。這應該發生在用戶鍵入的每個鍵上(即時)。所以,代碼:在列表框中的即時搜索算法
private void _keywordTextBox_TextChanged(object sender, EventArgs e)
{
string keyword = _keywordTextBox.Text;
if (keyword == searchtext || isSpace) // do nothing if space is typed - searchtext is a templatetext in the textbox ("type here to search...")
return; // ignore
else if (keyword == "")
{
listBox.Items.Clear();
foreach (string s in originalList)
listBox.Items.Add(s);
}
else
{
List<string> selection = new List<string>();
foreach (string s in originalList) // originalList is the listbox at startup
selection.Add(s);
listBox.BeginUpdate();
string[] keywordSplit = keyword.Split(' ');
try
{
for (int i = originalList.Count - 1; i >= 0; i--)
{
string[] selectionSplit = selection[i].Split(' ');
int l = 0; // number of hits
for (int j = 0; j < selectionSplit.Length; j++)
{
for (int k = 0; k < keywordSplit.Length; k++)
{
if (selectionSplit[j].ToLower().Contains(keywordSplit[k].ToLower()))
{
l++;
break;
}
}
}
if (l < keywordSplit.Length) // Not hit on all keywords
selection.RemoveAt(i);
}
}
finally
{
listBox.Items.Clear();
foreach (string s in selection) // Add selection in listbox
listBox.Items.Add(s);
if (listBox.Items.Count > 0)
listBox.SetSelected(0, true); // Select first item in listbox
listBox.EndUpdate();
}
}
}
這個問題很難描述,除非它不按預期工作。據我所知,行爲是零星的。
如果我搜索「CK流」,我應該得到一個命中計算器。更重要的是,它也應該工作,如果我刪除字符(刪除退格鍵)。任何人?
編輯:更多細節:
列表框應該收縮和增長的每次擊鍵,根據什麼用戶搜索。列表框應該保留每個與用戶輸入的關鍵字匹配的項目,並過濾掉不匹配的項目。
我想你說的功能試圖實現是由微軟的'ComboBox'提供'AutoComplete'功能,請參閱http://stackoverflow.com/questions/6243611/combobox-and-autocomplete-in-c-sharp – yogi
請詳細解釋代碼的預期用途。哪些元素應顯示或過濾?也許舉一些更多的例子。 – waldrumpus
@yogi否:)它只搜索字符串的開頭,不在中間。 – raze