读书人

用SHGetFileInfo添加图标到imagelist中

发布时间: 2012-05-24 11:55:41 作者: rapoo

用SHGetFileInfo添加图标到imagelist中.为什么添加到第16个就出错?
困扰几天的问题了.. 经过反复测试和另外单独测试.
最终结果是,不管怎么用.只要imagelist一共有16个图标了..

在listview 中一调用第16个图标..(索引数值为:15) 就提示:

“System.ArgumentOutOfRangeException”类型的未经处理的异常出现在 System.Windows.Forms.dll 中。

其他信息: InvalidArgument=“15”的值对于“StateImageIndex”无效。

VB.NET code
    Private Function addicon(ByVal filename As String, ByVal classname As String, ByVal hname As String) As Integer        Dim ico As Icon        Dim shfi_large As New shfileinfo        Dim otexts(-1) As String        Dim i As Integer = 0        otexts = Split(filename, ",")        If (otexts.Length > 0 And filename <> "") Then            If (FileLen(otexts(0)) > 0) Then ' 如果文件存在                If (otexts.Length = 2) Then                    If (otexts(1) = "%1") Then                        i = 0                    Else                        i = otexts(1)                    End If                End If                If (i < 0 Or i > 255) Then i = 0                ListView1.StateImageList = ImageList1                ListView1.StateImageList = ImageList1                SHGetFileInfo(otexts(0), i, shfi_large, Marshal.SizeOf(shfi_large), shgfi_largeicon Or shgfi_icon)                ico = Icon.FromHandle(shfi_large.hIcon)                Application.DoEvents()                ImageList1.Images.Add(ico)                Application.DoEvents()                Application.DoEvents()                Return ImageList1.Images.Count - 1            End If        End If        Return -1    End Function ' 如果失败则返回1


[解决办法]
问题解决了,不知道怎么结贴哦.
解决的办法就是:自绘.

读书人网 >VB Dotnet

热点推荐