如何获取ListViewControl上的item和subItem?

时间:2013-11-12 00:48:44

标签: c#

如何访问ListViewControl中的文件? 在初始事件中,我有一个按钮,使用foreach循环在lsitView上列出必要的文件。该控件有2个项目:文件名和&文件路径(subItem)

DirectoryInfo d = new DirectoryInfo(path);
foreach (FileInfo f in d.GetFiles("*.txt", SearchOption.AllDirectories))
{
    lstProjectFiles.Items.Add(f.Name).SubItems.Add(f.DirectoryName.ToString());
}      

现在,我想显示每个项目的完整路径以及带扩展名的文件名。

foreach(ListViewItem f in lstView1.Items)
{
    Console.Writeline(f.ToString());
}

当我得到文件名时,输出如下所示。有额外的字符串,而不是filename.extension:

  

ListViewItem:{sample.txt}

2 个答案:

答案 0 :(得分:1)

您只是将文件名加载到列表框中,而不是FileInfo。

如何欺骗一点并将FileInfo存储在Tag属性中?

DirectoryInfo d = new DirectoryInfo(path);
foreach (FileInfo f in d.GetFiles("*.txt", SearchOption.AllDirectories))
{
    lstProjectFiles.Items.Add(f.Name).SubItems.Add(f.DirectoryName.ToString()).Tag = f; // Store FileInfo in Tag property
}

...

foreach(ListViewItem f in lstView1.Items)
{
    Console.Writeline(((FileInfo)f.SubItems[0].Tag).FullName);
}

然后您可以在以后访问FileInfo对象中的任何内容。当然你可能想要重构&验证,但这是你可以采取的一种方法的要点。

答案 1 :(得分:1)

尝试类似这样的事情,使用SubItems Text Property

foreach (ListViewItem f in lstProjectFiles.Items)
{
    Console.WriteLine(f.SubItems[0].Text);
    Console.WriteLine(f.SubItems[1].Text);
}