带有列表视图和图像列表的项目图标

带有列表视图和图像列表的项目图标

问题描述:

你好我有一个列表视图,可以打开文件夹中的项目并显示它们。我想知道是否有办法让列表视图显示图标,也可以使用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/

+0

你想显示哪个图标?与文件资源管理器相关的那个文件夹呢? – 2012-01-13 16:08:08

+0

是的,如果它是.txt我希望它显示.txt图标。 – user1100407 2012-01-13 16:10:07

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

+0

我试过这样做,但是在识别扩展时我总是收到错误。 – user1100407 2012-01-13 16:35:34

+0

你是说,你不知道如何找到一个对应于特定文件扩展名的图标,并且你的问题没有显示图标,而是找到一个图标? – 2012-01-13 16:49:28

+0

这是两个。我知道大多数默认图标都在shell32.dll上,但我不知道如何将它们导入到VB的listview中,也不知道如何根据扩展名显示它们。我已经尝试了几个选项,但是我没有运气,所以任何帮助都是合适的。 – user1100407 2012-01-13 16:54:24

那么你需要找到文件的扩展名入手:

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 来提取图标。 This link也可能有用

+0

谢谢,但我不认为我可以这样做,因为这个程序将在多台PC上使用,所以如果我尝试将其定义为使用文件夹中的一个文件中的图标,并且该文件不存在,它将会出错出。 – user1100407 2012-01-13 16:52:25

+0

是的,问题是,图标嵌入在DLL和EXE中。它们不可用作图标文件。 – 2012-01-13 16:54:56

+0

是的,您可以使用ExtractIconEx从嵌入式DLL或EXE中提取图标,您可以在找到每个文件时即时执行此操作。这些值在每台计算机上可能会不同,这就是为什么每次需要读取注册表才能找到要提取的图标的原因 – 2012-01-13 17:00:35