【问题标题】:Changing ImageSize property of ImageList displays blank images更改 ImageList 的 ImageSize 属性显示空白图像
【发布时间】:2016-06-27 07:35:17
【问题描述】:

在 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 的,这样可以更容易地按比例缩小。

【问题讨论】:

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

标签: .net vb.net listview imagelist


【解决方案1】:

更改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,而是有一个“主”以及“活动”尺寸版本。它似乎工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多