2

当我在 .NET 中使用 ImageList 时,我很困惑。首先,我有一个包含三个不同 ImageList 的全局对象 (ImageManager):

  • smallImages(尺寸:16x16)- 包含 50 张图片(从 Designer 添加)
  • largeImages(尺寸:48x48) - 包含 0 张图片
  • gridImages(尺寸:16x16) - 包含 17 张图片(从 Designer 添加)

ImageManager 在启动时初始化一次。gridImages用于网格控件 (JanusGridEx) 并按值传递。在运行时(在网格控件中),我将三个新图像添加到gridImages. 我试图以三种不同的方式添加它:

  • 第一次尝试
Dim ImageBuffer As Byte() = CType(DataRow(pColumnImageName), Byte())
gridImages.Images.Add(imageKey, New Icon(New MemoryStream(ImageBuffer)))
  • 第二次尝试
 Dim ImageBuffer As Byte() = CType(DataRow(pColumnImageName), Byte())
 Dim newImage As Image = Image.FromStream(New MemoryStream(ImageBuffer))
 gridImages.Images.Add(newImage)
  • 第三次尝试(我认为这是最好的方法 - 如果我错了,请纠正我)
Dim ImageBuffer As Byte() = CType(DataRow(pColumnImageName), Byte())
Using ms As New MemoryStream(ImageBuffer , 0, ImageBuffer.Length)
      gridImages.Images.Add(imageKey, Image.FromStream(ms))
End Using

现在的问题是,当最后一张图片被添加到其中时gridImages,我想要 ie。通过使用 imageKey 或索引获取最后一个图像(gridImages.Images(20))我收到异常:System.ArgumentException: Parameter is not valid.callstack:

System.ArgumentException:参数无效。在 System.Drawing.Bitmap.LockBits(矩形矩形,ImageLockMode 标志,PixelFormat 格式,BitmapData bitmapData)在 System.Drawing.Bitmap.LockBits(矩形矩形,ImageLockMode 标志,PixelFormat 格式)在 System.Windows.Forms.ImageList.GetBitmap( Int32 index) at System.Windows.Forms.ImageList.ImageCollection.get_Item(Int32 index) at Janus.Windows.GridEX.Internal.JNSBB.a(Graphics , Brush , String , Image , Rectangle , ImageHorizo​​ntalAlignment , ImageVerticalAlignment , JNSDQ , Font , Boolean , Int32 , ImageList , Boolean ) 在 Janus.Windows.GridEX.EditControls.JNSAQ.a(Graphics , Int32 , Rectangle ) 在 Janus.Windows.GridEX.EditControls.JNSAQ.a(Graphics ) 在 Janus.Windows.GridEX.EditControls .JNSAQ.OnPaint(PaintEventArgs e) 在 System.Windows.Forms.Control。

第一个问题:为什么会这样?当我创建一个新的 Image 实例,甚至尝试将它保存在磁盘上时,它可以正常工作。

第二个问题:在将 ImageList 按值传递给 Grid 控件之前,我创建了一个 ImageList 的新实例并将所有图像从 ImageList (ImageManager) 复制到该实例 (DeepCopy)。当我制作 DeepCopy 并将新图像添加到新的 ImageList 时,它也可以正常工作。这是为什么?为什么它有效?

4

0 回答 0