更改ImageList的ImageSize属性显示空白图像

时间:2016-03-11 21:58:13

标签: .net vb.net listview imagelist

在Visual Studio的VB.Net解决方案中,我有一个ListView和一个与ListView相关联的ImageList。它被设置为LargeImageList和SmallImageList。

如果没有以编程方式更改ImageList的ImageSize属性,它的外观如下:

但是,如果我通过以下方式调整ImageList的大小:

ImageList1.ImageSize = New Size(64, 64)

或任何其他尺寸,我明白了:

我之后尝试调用 ListView1.Refresh(),但仍然没有。

我甚至尝试过:

ListView1.LargeImageList.ImageSize = New Point(64, 64)

如何在项目运行时动态设置图标的大小?我需要能够将它们调整为几种尺寸(即32x32,64x64,96x96等)

ImageList中的图像都是128x128,因此可以更轻松地缩小它们。

1 个答案:

答案 0 :(得分:2)

更改ImageSize会导致重新创建的句柄可能会破坏链接或分配。这在MSDN上解释。它还会警告您在更改ColorDepth时删除的图像;但是,当你至少在某些情况下改变尺寸时,这似乎也会发生:

imgLst.ImageSize = New Size(64, 64)
Dim num = ImgLst.Images.Count          ' == 0

反复改变一组的大小可能不是一个好主意:从32调整到128可能会产生可怕的结果。有一个ImageList作为主人,其中包含128x128图像是有效的。如果要更改大小,请将其复制到" working" ImageList新尺寸:

Private Sub LoadImagesWithSize(sz As Size)

    imgLst.ImageSize = sz
    imgLst.Images.Clear
    For n As Int32 = 0 To ImageList128.Images.Count - 1
        imgLst.Images.Add(ImageList128.Images(n))
    Next
    myLV.LargeImageList = imgLst

End Sub

将其命名为:

LoadImagesWithSize(New Size(64, 64))

对于每个可能的大小,而不是ImageList,有一个" master"以及"活跃"尺寸版本。它似乎工作正常。