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

.net 更改ImageList的ImageSize属性将显示空白图像,.net,vb.net,listview,imagelist,.net,Vb.net,Listview,Imagelist,在Visual Studio中的VB.Net解决方案中,我有一个ListView和一个与该ListView关联的ImageList。它被设置为大图像列表和小图像列表 以下是在不以编程方式更改ImageList的ImageSize属性的情况下的外观: 但是,如果我通过以下方式调整ImageList的大小: ImageList1.ImageSize = New Size(64, 64) 或任何其他尺寸,我得到这个: 后来我试着调用ListView1.Refresh(),但仍然没有结果 我甚至试

在Visual Studio中的VB.Net解决方案中,我有一个ListView和一个与该ListView关联的ImageList。它被设置为大图像列表和小图像列表

以下是在不以编程方式更改ImageList的ImageSize属性的情况下的外观:

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

ImageList1.ImageSize = New Size(64, 64)
或任何其他尺寸,我得到这个:

后来我试着调用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
。它似乎工作正常。

设置ImageList size属性会导致重新创建句柄。因此,关联可能会丢失(
myLV.LargeImageList=Nothing
)。尝试重置它,您可以使用size属性将较小的版本从较大的版本加载到不同的版本(ImgLst32、ImgList64等)中一次,以避免出现问题。我也尝试过,结果相同。