当用户从FolderBrowserDialog中选择文件夹时,如何在ViewList中显示图像图标?

时间:2012-10-21 08:25:31

标签: c# listview imageicon folderbrowserdialog

基本上我想要的是用户按下浏览按钮并弹出FolderBroswerDialog。然后,用户选择一个文件夹,然后使用图标视图中该文件夹中的所有图像填充ViewList。我怎样才能做到这一点?我目前拥有的代码将从文件夹中选择所有文件并在ListView中显示它们,但是没有图标。我怎样才能获得图标?
这是我目前的代码......

private void button1_Click(object sender, EventArgs e)
{

    FolderBrowserDialog browsefolder = new FolderBrowserDialog();
    if (browsefolder.ShowDialog() == DialogResult.OK)
    {
        listView1.Items.Clear();

        string[] myfiles = Directory.GetFiles(folderPicker.SelectedPath);
        foreach (string file in myfiles)
        {
            string fileName = Path.GetFileNameWithoutExtension(file);
            ListViewItem myitem = new ListViewItem(fileName);
            myitem.Tag = file;
            listView1.Items.Add(myitem);
        }

    }
}

1 个答案:

答案 0 :(得分:1)

以准确和高效的方式做这件事并不容易。快速而又脏的方法是使用Icon.ExtractAssociatedIcon()并将返回的图标添加到与列表视图关联的ImageList。但是你不会得到你在资源管理器中看到的完全相同的图标。这需要调整SHGetFileInfo(),自己很痛苦,但代码很容易google。

完全不同的方法是将Explorer窗口嵌入到您自己的表单中,而不是使用ListView。凭借主要优势,您将获得完全相同的外观,并且您将自动获得在程序保持响应时查找图标的后台线程。缺点是这不适用于XP。您需要的课程是Windows API Code Pack

的一部分