0

您好,我有一个列表视图,可以打开文件夹内的项目并显示它们。我想知道是否有办法让列表视图也显示图标,可能使用 shell32 或 imagelist。这是代码:

Imports System.IO
Imports System.Xml
Imports System.Runtime.InteropServices
Imports Microsoft.VisualBasic

Public Class cv7import

Private Sub cv7import_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim caminho As String
    caminho = "C:\Documents and Settings\Software\Ambiente de trabalho\1"



    lstvicon.View = View.Details
    lstvicon.GridLines = False
    lstvicon.FullRowSelect = True
    lstvicon.HideSelection = False
    lstvicon.MultiSelect = True


    lstvicon.Columns.Add("Nome")
    lstvicon.AutoResizeColumns(ColumnHeaderAutoResizeStyle.HeaderSize)

    Dim DI As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(caminho)

    Dim files() As System.IO.FileInfo = DI.GetFiles

    Dim file As System.IO.FileInfo

    Dim li As ListViewItem
    For Each file In files
        li = lstvicon.Items.Add(file.Name)
        li.Tag = file.FullName
    Next
End Sub


End Class

这是两张图片,说明它的外观以及我希望它的外观(如果有帮助的话)。

我想要什么:http: //imageshack.us/photo/my-images/21/wantd.png/

它的外观:http: //imageshack.us/photo/my-images/13/needk.png/

4

2 回答 2

1

那么你需要找到文件的扩展名以开始:

Dim file As String = "C:\scratch\newfile.txt"
Dim ext as string = IO.Path.GetExtension(file)

然后你需要在HKEY_CLASSES_ROOT注册表的部分找到这个条目:

HKEY_CLASSES_ROOT\.txt

此键中的默认值在我的情况下给出了与此文件关联的文件类型txtfile(请记住,不同的注册表可能具有不同的值,具体取决于用户设置的内容和安装的程序)

然后,您需要在以下位置查找此值DefaultIconHKEY_CLASSES_ROOT

HKEY_CLASSES_ROOT\txtfile\DefaultIcon

此处的默认值为您提供图标的位置和在我的情况下的图标编号:

%SystemRoot%\system32\imageres.dll,-102

从这一点来看,我认为您可能需要依靠ExtractIconEX API 来提取图标。这个链接也可能有用

于 2012-01-13T16:32:32.697 回答
0

ListViewItemsImageList,ImageIndexImageKey属性。将ImageList控件添加到您的表单(来自工具箱中的组件组)。当图像列表被选中时,您可以ImageList通过单击属性网格下方的“选择图像”来添加图像。然后将图像列表和图像索引或图像键分配给列表项。

于 2012-01-13T16:25:23.137 回答