带有列表视图和图像列表的项目图标
你好我有一个列表视图,可以打开文件夹中的项目并显示它们。我想知道是否有办法让列表视图显示图标,也可以使用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
这里有两张图片,它是如何看起来以及我希望它看起来如何,如果它有帮助。
ListViewItems
有ImageList
,ImageIndex
和ImageKey
性能。将一个ImageList
控件添加到您的表单(从工具箱中的组件组)。当选择图像列表时,您可以通过单击属性网格下方的“选择图像”将图像添加到ImageList
。然后将图像列表和图像索引或图像键分配给您的列表项目。
我试过这样做,但是在识别扩展时我总是收到错误。 – user1100407 2012-01-13 16:35:34
你是说,你不知道如何找到一个对应于特定文件扩展名的图标,并且你的问题没有显示图标,而是找到一个图标? – 2012-01-13 16:49:28
这是两个。我知道大多数默认图标都在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
(请记住,不同的注册表可能有不同的值,具体取决于用户设置的内容和安装的程序)
然后您需要查看这个值DefaultIcon
键HKEY_CLASSES_ROOT
:
HKEY_CLASSES_ROOT\txtfile\DefaultIcon
在此处的默认值为给你的图标在我的情况下,位置和图标号:
%SystemRoot%\system32\imageres.dll,-102
从这一点我想你可能需要依靠ExtractIconEX API 来提取图标。 This link也可能有用
谢谢,但我不认为我可以这样做,因为这个程序将在多台PC上使用,所以如果我尝试将其定义为使用文件夹中的一个文件中的图标,并且该文件不存在,它将会出错出。 – user1100407 2012-01-13 16:52:25
是的,问题是,图标嵌入在DLL和EXE中。它们不可用作图标文件。 – 2012-01-13 16:54:56
是的,您可以使用ExtractIconEx从嵌入式DLL或EXE中提取图标,您可以在找到每个文件时即时执行此操作。这些值在每台计算机上可能会不同,这就是为什么每次需要读取注册表才能找到要提取的图标的原因 – 2012-01-13 17:00:35
你想显示哪个图标?与文件资源管理器相关的那个文件夹呢? – 2012-01-13 16:08:08
是的,如果它是.txt我希望它显示.txt图标。 – user1100407 2012-01-13 16:10:07