我无法在这里找到解决方案,因为它与其他类似问题的解决方式不同。
基本上,我想过滤一个包含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));
}
}
}
对我的小问题的任何帮助将不胜感激!
答案 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);
}
}