0

所以基本上我想要的是用户按下浏览按钮并弹出一个 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);
        }

    }
}
4

1 回答 1

1

要以准确和高效的方式做到这一点并不容易。快速而肮脏的方法是使用 Icon.ExtractAssociatedIcon() 并将返回的图标添加到与列表视图关联的 ImageList 中。但是您不会获得在 Explorer 中看到的完全相同的图标。这需要调用 SHGetFileInfo(),自己做起来很痛苦,但代码很容易用谷歌搜索。

一种完全不同的方法是将资源管理器窗口嵌入到您自己的表单中,而不是使用 ListView。主要优点是您将获得完全相同的外观,并且您将自动获得在程序保持响应时查找图标的后台线程。缺点是这不适用于 XP。您需要的类是Windows API 代码包的一部分。

于 2012-10-21T13:59:39.877 回答