我希望能夠過濾包含1000個字符串的列表框,每個字符長度爲50-4000個字符,因爲用戶在文本框中輸入時沒有延遲。實時過濾列表框
我正在使用一個計時器,它在文本框的TextChanged
事件沒有在300ms內被觸發後更新列表框。然而,這是非常生澀的,用戶界面有時會暫時凍結。
實現與此類似功能的正常方式是什麼?
編輯:我使用winforms和.net2。
感謝
這裏是代碼的精簡版本,我目前正在使用:
string separatedSearchString = this.filterTextBox.Text;
List<string> searchStrings = new List<string>(separatedSearchString.Split(new char[] { ';' },
StringSplitOptions.RemoveEmptyEntries));
//this is a member variable which is cleared when new data is loaded into the listbox
if (this.unfilteredItems.Count == 0)
{
foreach (IMessage line in this.logMessagesListBox.Items)
{
this.unfilteredItems.Add(line);
}
}
StringComparison comp = this.IsCaseInsensitive
? StringComparison.OrdinalIgnoreCase
: StringComparison.Ordinal;
List<IMessage> resultingFilteredItems = new List<IMessage>();
foreach (IMessage line in this.unfilteredItems)
{
string message = line.ToString();
if(searchStrings.TrueForAll(delegate(string item) { return message.IndexOf(item, comp) >= 0; }))
{
resultingFilteredItems.Add(line);
}
}
this.logMessagesListBox.BeginUpdate();
this.logMessagesListBox.Items.Clear();
this.logMessagesListBox.Items.AddRange(resultingFilteredItems.ToArray());
this.logMessagesListBox.EndUpdate();
ASP.NET或WinForms或其他? – kbrimington 2010-08-04 20:18:33
我正在使用winforms。 – Ryan 2010-08-04 20:18:51