使用文本框过滤列表框,同时使用文件名填充列表框

时间:2016-09-05 11:48:42

标签: c# wpf filter textbox listbox

我无法在这里找到解决方案,因为它与其他类似问题的解决方式不同。

基本上,我想过滤一个包含Dvd名称的列表框。

如何填充列表框:

private void AdminShop_Load(object sender, EventArgs e)
    {
        string[] files = Directory.GetFiles("C:\\DvDShop\\DvdNames\\");

        foreach (string file in files)
        {
            lbxDvd.Items.Add(System.IO.Path.GetFileNameWithoutExtension(file));
        }

    }

到目前为止,在textChanged中,当我在文本框中输入任何文本时,列表框变为空白,但是当我删除文本框中的任何内容时,它会再次填充所有条目。我觉得我在这里错过了一个简单的问题。

框TextChanged:

private void txtSearch_TextChanged(object sender, EventArgs e)
    {
        string[] files = Directory.GetFiles("C:\\DvDShop\\DvdNames\\");

        if (String.IsNullOrEmpty(txtSearch.Text.Trim()) == false)
        {
            lbxDvd.Items.Clear();
            foreach (string file in files)
            {
                if (file.StartsWith(txtSearch.Text.Trim()))
                {
                    lbxDvd.Items.Add(System.IO.Path.GetFileNameWithoutExtension(file));
                }
            }

        }
        else if (txtSearch.Text.Trim() == "")
        {
            lbxDvd.Items.Clear();

            foreach (string file in files)
            {
                lbxDvd.Items.Add(System.IO.Path.GetFileNameWithoutExtension(file));
            }
        }
    }

对我的小问题的任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您正在使用完整路径检查它是否以“使用它开始”,请尝试以下代码:

private void txtSearch_TextChanged(object sender, EventArgs e)
{
    string[] files = Directory.GetFiles("C:\\DvDShop\\DvdNames\\");

    if (String.IsNullOrEmpty(txtSearch.Text.Trim()) == false)
    {
        lbxDvd.Items.Clear();
        foreach (string file in files)
        {
            string filename = System.IO.Path.GetFileNameWithoutExtension(file); 
            if (filename.StartsWith(txtSearch.Text.Trim()))
            {
                lbxDvd.Items.Add(System.IO.Path.GetFileNameWithoutExtension(file));
            }
        }

    }
    else if (txtSearch.Text.Trim() == "")
    {
        lbxDvd.Items.Clear();

        foreach (string file in files)
        {
            lbxDvd.Items.Add(System.IO.Path.GetFileNameWithoutExtension(file));
        }
    }
}

答案 1 :(得分:1)

您正在查看返回完整路径的Directory.GetFiles()。而是获取文件名并检查

        foreach (string file in files)
        {
          string filename = System.IO.Path.GetFileNameWithoutExtension(file);
            if (filename.StartsWith(txtSearch.Text.Trim()))
            {
                lbxDvd.Items.Add(filename);
            }
        }