搜索ListBox控件并以编程方式选择最接近的匹配

时间:2012-03-14 19:58:20

标签: c# search listbox

我有一个ListBox控件,其中填充了大型零售连锁店的分支机构。使用该系统的工作人员必须登录相关分支,我希望他们能够搜索ListBox以找到他们的分支。

我已经为搜索框中的文本更改创建了一个事件处理程序,并尝试在StackOverflow上使用代码声音:

private int lastMatch = 0;

private void txtSearch_TextChanged(object sender, EventArgs e)
    {
        int x = 0;
        string match = txtSearch.Text;

        if (txtSearch.Text.Length != 0)
        {
            bool found = true;
            while (found)
            {
                if (lbBranches.Items.Count == x)
                {
                    lbBranches.SetSelected(lastMatch, true);
                    found = false;
                }
                else
                {
                    lbBranches.SetSelected(x, true);
                    match = lbBranches.SelectedValue.ToString();
                    if (match.Contains(txtSearch.Text))
                    {
                        lastMatch = x;
                        found = false;
                    }
                    x++;
                }
            }
        }
    }

当我编译并开始在搜索框中输入时,我收到此错误:

Object reference not set to an instance of an object.

有问题的一行是:

match = lbBranches.SelectedValue.ToString();

我不知道那里有什么不对,有人有个主意吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

如果已指定列表框的ValueMember属性以指示要从中读取所选项的值的属性,则列表框的SelectedValue将仅返回值。在这种情况下,您要使用的属性是SelectedItem:

match = lbBranches.SelectedItem.ToString();

答案 1 :(得分:0)

当用户输入文本时,可能没有选择任何值(因此错误) - 请记住,用户输入的内容与控件列表框子元素中的选择没有强制或直接关联

使用完整的组合框控件可以更简单地实现你所做的事情,我认为MSDN上的一些例子对你也很有帮助