在Visual C#中从列表框中搜索和过滤结果

时间:2019-02-23 07:43:54

标签: c# visual-studio button search listbox

我正在学习如何使用C#进行编码,并且试图找到一种方法来从包含数据的列表框中搜索和过滤结果。现在,我有一个列表框和一个搜索按钮,我的列表框包含网站历史记录,并且我的搜索按钮找到了列表中的项目,但是我无法找到一种方法来过滤掉其他项目,因此仅显示我在文本框中搜索的内容在列表框中。现在,我的搜索按钮看起来像这样。有什么想法吗?

app.config_from_object('django.conf:settings', namespace='CELERY')

2 个答案:

答案 0 :(得分:1)

有一个众所周知的“技巧”可以在迭代集合时删除项目。您应该使用for ...循环向后迭代(从最后一项到第一个)。
这样,当您删除一个项目时,不会影响退出循环的条件,并且可以确保对每个项目都进行评估。

private void searchBtn_Click(object sender, EventArgs e)
{
    for (int i = listBoxHist.Items.Count - 1; i >= 0; i--)
    {
        if (listBoxHist.Items[i].ToString().Contains(textboxSearch.Text))
            listBoxHist.SetSelected(i, true);
        else
            listBoxHist.Items.RemoveAt(i);
    }
}

如果在向前循环时执行此代码,则将无法正确评估每个项目。假设您删除索引为3的项目。位置4的项目将如何处理?它向下滑动一个位置,现在占据位置3,此后的每个其他位置都发生这种情况。现在,您的循环会将索引增加到4,并开始评估在调用RemoveAt之前位于位置5的项目。您已跳过对商品的评估。

答案 1 :(得分:0)

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            ListBox1.Items.Add("B");
            ListBox1.Items.Add("A");
            ListBox1.Items.Add("P");
            ListBox1.Items.Add("X");
            ListBox1.Items.Add("F");
            ListBox1.Items.Add("S");
            ListBox1.Items.Add("Z");
        }
    }


    protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        String txt=txtsearch.Text;
        if (ListBox1.Items.FindByText(txt)!= null)
        {
           // ListBox1.Items.FindByText(txt).Selected = true;

            Response.Write("<script> alert('Item found.');</script>");
        }
        else
        {
            Response.Write("<script> alert('Item Not found.');</script>");
        }
    }

}