是否删除c#中列表框中显示的文件?

是否删除c#中列表框中显示的文件?,c#,listboxitem,C#,Listboxitem,我有一个列表框,在Windows中显示文件搜索的结果 我希望能够做到的是,在突出显示项目的同时按delete键,并从系统中删除实际文件 我让它用于目录为Directory.Delete(obj.ToString())的目录;但我不能让下面的工作文件,如果有人可以帮助它将不胜感激。我按下Del键后出现非法字符错误 private void listBoxResults_KeyDown(object sender, KeyEventArgs e) { if (btnFiles

我有一个列表框,在Windows中显示文件搜索的结果

我希望能够做到的是,在突出显示项目的同时按delete键,并从系统中删除实际文件

我让它用于目录为Directory.Delete(obj.ToString())的目录;但我不能让下面的工作文件,如果有人可以帮助它将不胜感激。我按下Del键后出现非法字符错误

private void listBoxResults_KeyDown(object sender, KeyEventArgs e)
    {
        if (btnFilesClicked == true)
        {
            if (e.KeyCode == Keys.Delete)
            {
                List<int> sItems = new List<int>();
                foreach (var obj in listBoxResults.SelectedIndices)
                {
                    sItems.Add(Convert.ToInt32(obj));
                }
                foreach (var obj in listBoxResults.SelectedItems)
                {
                    try
                    {
                        File.Delete(obj.ToString());
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
                foreach (int item in sItems.OrderByDescending(x => x))
                {
                    listBoxResults.Items.RemoveAt(item);
                }
            }
        }
private void listBoxResults\u KeyDown(对象发送方,KeyEventArgs e)
{
如果(btnFilesClicked==true)
{
if(e.KeyCode==Keys.Delete)
{
列表站点=新列表();
foreach(listBoxResults.SelectedIndices中的var obj)
{
sItems.Add(Convert.ToInt32(obj));
}
foreach(listBoxResults.SelectedItems中的var obj)
{
尝试
{
Delete(obj.ToString());
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
}
}
foreach(sItems.OrderByDescending中的int项(x=>x))
{
listBoxResults.Items.RemoveAt(项目);
}
}
}

首先
ListBox.SelectedItems
是IList的一个实例,它不是一个通用实现,因此它只会给您提供对象实例

查看此msdn的
列表框。选择editems

第二件事是,当您在obj上调用ToString()时,它的默认实现将返回您的类型名称

这就是您的代码不能按您所希望的方式工作的原因

try
{
    File.Delete(obj.ToString()); // this requires file name not the type name
}
您需要了解如何首先获取文件名,然后可以调用下面的
Delete
方法

try
{
    var fileName = GetFileName();
    File.Delete(fileName);
}

是否调试了应用程序?请放置断点并检查obj.ToString()的值。如何填充列表框?问题似乎存在,因为当您从列表中检索项目并尝试调用File.Delete时,它会抱怨传递的项目。因为.NET中的每个对象都有一个
.ToString()
方法除了显示结果之外,您应该避免将其用于任何其他用途。您是否可以强制转换到特定对象,而不是使用
.ToString()
?在此foreach(listBoxResults.SelectedItems中的var obj)下,所选项为{SelectedItem=“C:\\Temp\\Blank text file.txt\r\n”},而obj.ToString值为obj=“C:\\Temp\\Blank text file.txt\r\n”从外观上看,我需要删除\r\n?