2012-01-13 213 views
0

你好我有一個列表視圖,可以打開文件夾中的項目並顯示它們。我想知道是否有辦法讓列表視圖顯示圖標,也可以使用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

回答

0

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

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 來提取圖標。 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