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

这是不通过编程方式更改ImageList的ImageSize属性的情况:
.net - 更改ImageList的ImageSize属性将显示空白图像-LMLPHP

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

ImageList1.ImageSize = New Size(64, 64)

或任何其他尺寸,我得到这个:

.net - 更改ImageList的ImageSize属性将显示空白图像-LMLPHP

之后,我尝试调用 ListView1.Refresh(),仍然一无所获。

我什至尝试:
ListView1.LargeImageList.ImageSize = New Point(64, 64)

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

ImageList中的图像均为128x128,因此可以更轻松地按比例缩小图像。

最佳答案

更改ImageSize会导致重新创建句柄,这可能会断开链接或分配。在MSDN上对此进行了解释。它还会警告您在更改ColorDepth时删除了图像;但这至少在某些情况下更改大小时似乎也会发生:

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

无论如何,反复更改一组的大小可能不是一个好主意:将大小从32调整为128可能会产生可怕的结果。起作用的是将一个ImageList作为具有128x128图像的主控文件。当您想要更改大小时,将它们复制到新大小的“工作” 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”以及“active” size-version。似乎工作正常。

10-08 17:18