Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用textbox筛选列表框,而使用文件名填充列表框_C#_Wpf_Filter_Textbox_Listbox - Fatal编程技术网

C# 使用textbox筛选列表框,而使用文件名填充列表框

C# 使用textbox筛选列表框,而使用文件名填充列表框,c#,wpf,filter,textbox,listbox,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) {

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

基本上,我想过滤一个包含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中,当我在textbox中输入任何文本时,列表框将变为空白,但当我删除textbox中的任何内容时,列表框将再次填充所有条目。我觉得我错过了一个简单的问题

文本更改:

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));
            }
        }
    }

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

如果要使用完整路径检查它是否以它开头,请尝试以下代码:

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));
        }
    }
}

您正在检查返回完整路径的
目录.GetFiles()
。而是获取文件名并像这样检查

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

请举例说明您的文件名以及您在文本框中输入的内容可能应该是
string filename=System.IO.Path.GetFileNameWithoutExtension(文件);如果(filename.StartsWith(txtSearch.Text.Trim()
…@Rahul)这里有一些图片来说明这个问题:1:2:3:无论如何,我认为这是非常不有效的。你应该使用ObservableCollection并使用过滤器,而不是从列表框中添加/删除项目。就是这样!它现在工作得很好!非常感谢你Pikoh!