【发布时间】:2010-10-14 14:27:21
【问题描述】:
我正在使用来自 TextBox 的输入来过滤 ListBox 中显示的信息。我希望每次按下某个键时都会进行过滤。
我面临的问题是,如果用户键入第二个、第三个等字符,过滤器将在每次按键时继续执行。例如。用户键入“a”并开始过滤,在完成对字母“a”的过滤之前,用户添加了字母“b”,因此完整的搜索字符串现在是“ab”。
此时,我希望第一个过滤器完全停止并从头开始在“ab”上启动新过滤器。
private bool Interrupt = false;
private bool Searching = true;
private void tbxFilter_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (Searching)
{
Interrupt = true;
}
}
private void tbxFilter_KeyUp(object sender, KeyEventArgs e)
{
Searching = true;
foreach (MyObject o in ListOfMyObjects)
{
if (Interrupt)
{
Interrupt = false;
break;
}
else
{
DoFilter(o);
}
}
Searching = false;
}
上面的代码大致显示了我目前所拥有的内容,其中删除了一些特定于应用程序的部分(如类型和对象名称)。
我最理想的做法是能够在第二次按键开始时暂停(直到 Searching 设置为 false - 表示所有其他搜索都已退出),但添加一个 while 循环来检查将在此时锁定程序。
有没有办法做到这一点?
谢谢
编辑:显示项目的控件是 ListBox / ListView 控件。
【问题讨论】:
-
为什么不使用组合框的自动完成功能呢?一切都为您解决
-
显示项目的控件是 ListBox 或 ListView 控件。很抱歉没有在上面指定。
-
不,没关系,我知道了,我只是想知道它是否必须是一个列表框,或者您是否可以使用组合框,因为它的功能与您需要的内置功能非常相似,可以节省你必须写这个