与listview和imagelist的项目图标

时间:2012-01-13 14:51:28

标签: vb.net listview imagelist

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

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/

2 个答案:

答案 0 :(得分: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中的此文件关联的文件类型(请记住,根据用户设置的内容和安装的程序,不同的注册表可能具有不同的值)

然后,您需要在DefaultIcon

中查找此值HKEY_CLASSES_ROOT
HKEY_CLASSES_ROOT\txtfile\DefaultIcon

此处的默认值为您提供了我的案例中图标和图标编号的位置:

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

从这一点开始,我认为您可能需要依赖ExtractIconEX API 提取图标。 This link也可能有用

答案 1 :(得分:0)

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