我希望能够过滤包含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